我怎么写一个||在 Javascript 中,其中 0 不被视为假值
How do I write an || expression in Javascript where 0 isn't treated as a falsy value?
请原谅我的英语。我不是母语人士。
当我编写这样的代码时,我的问题来了
luminosity = settings.luminosity || 50;
opacity = settings.opacity || 100;
问题是0
应该是一个有效的值,但它会被忽略,因为它在 Javascript 中0
是伪造的,它将设置为 ||
右侧的默认值。
有没有办法进行修复,这样0
就不会被视为虚假?
现在我正在做
luminosity = "luminosity" in settings ? settings.luminosity : 50;
但我不喜欢这样,因为它太长了。
您需要做的就是编写一个辅助函数...
function ifNotSet(val, other) {
return typeof val === "undefined" ? other : val;
}
您可以将其转换为字符串'0'
truthy
:
luminosity = settings.luminosity === 0 ? '' + settings.luminosity : settings.luminosity || 50;
opacity = settings.opacity === 0 ? '' + settings.opacity : settings.opacity || 100;
或者您可以根据您的输入或要求简单地使用它:
luminosity = '' + settings.luminosity || 50;
opacity = '' + settings.opacity || 100;
'' + number
是将数字转换为字符串的简写。
拥有默认选项/设置的常用方法是 jQuery 中的.extend()
方法。纯JS也有这种方法,但有一些不同。
/* merge object2 into object1 */
$.extend(object1, object2);
这是您需要的:
var defaultSetting = {luminosity : 50, opacity : 100};
setting = $.extend({}, defaultSetting, setting);
调整@Tooraj代码的初始版本:
var setting = {luminosity:0};
var defaultSetting = {luminosity:50, opacity:100};
setting = $.extend({}, defaultSetting, setting);
// setting now has a value of {luminosity:0, opacity:100}
我以前没有这样做过。但它似乎在FF,Chrome和IE9中工作正常。
相关文章:
- Knockout observable没有观察到其中一个属性
- 将其中一个异步方法重写为使用promise的方法
- 查找对象数组是否包含其中一个标记的最快方法
- Javascript未在其中一个变量上输出0
- 页面上的2个表单带有JS验证-其中一个抛出电子邮件验证错误
- 单击删除其中一个添加的行
- 包含一个集合的1到3个成员但其中一个成员不能单独存在的正则表达式
- 使用其中一个元素作为参考点,从Javascript数组中选择元素
- Javascript:当同时按下两个键时,留下其中一个也会影响另一个的听众
- 无限多维数组,其中一个值被覆盖
- 捕捉.svg — 单击其中一个元素时删除对象
- 在html文件中添加了多个外部javascript,其中一个停止工作
- 几个jQuery日期选择器小部件,只向其中一个添加类
- 如何将此转盘调整为仅当用户将鼠标悬停在其中一个框上时暂停
- 多个输入,用户只能在其中一个输入中输入
- 选择其中一个单选按钮,然后单击“提交”,重定向其他页面
- Javascript自动播放声音文件,单击其中一个按钮时停止
- 更新其中一个字段时刷新其他输入字段.使用Angularjs(附Plunker)
- Accordion选择在使用jquery点击其中一个时无法正常工作
- 在ember.js记录上使用toJSON,将其中一个属性设置为null