我所处理的开源JavaScript项目包括代码:
if (color) {
tapeDiv.style.backgroundColor = color;
// set color here if defined by event. Else use css
}
贡献者希望将其更改为
if (color != null) { // this line changed
tapeDiv.style.backgroundColor = color;
// set color here if defined by event. Else use css
}
color是一个字符串var。只应使用超过0个字符的字符串来明确设置颜色。
由于JS转换为“”而null为boolean false,为什么需要比较!= null?
我认为第一种形式与第二种形式一样好(并且稍微短一点),我错过了什么?
我在JS源代码中经常看到与null的比较。当所有JS简单对象在作为布尔值转换时已知结果时,为什么需要它们?
谢谢,
拉里
PS。我想如果0(整数)是一个有效的情况,那么如果(0)将是假[问题]并且如果(0!= null)将为真[允许0情况]。还有其他原因吗?
PPS。应该提到tapeDiv是新创建的。所以没有必要将样式重置为“”,因为div是全新的。
答案 0 :(得分:18)
使用所有可能的假值来评估作业,您将得到答案:
tapeDiv.style.backgroundColor = false; // does nothing
tapeDiv.style.backgroundColor = 0; // sets as "black",
// but ignored by FF
tapeDiv.style.backgroundColor = null; // resets the background-color
// to use whatever is defined
// in a stylesheet (if any),
// but ignored by IE.
tapeDiv.style.backgroundColor = ''; // resets the background-color
// to use whatever is defined
// in a stylesheet (if any).
检查“if (color)
”不会让任何人通过。
检查“if (color != null)
”将让1),2)和4)通过。 1)没有做任何事情,2)在Firefox中无法按预期工作,4)将始终按预期工作。但是,“作品”取决于您的上下文(您未提供)。
希望有所帮助。
答案 1 :(得分:5)
不,你的ps是正确的。 Null将评估为false,如果null需要与空字符串或0区分开,那么您将进行空检查。
或者它可能只是为了清晰。表明您特意寻找null是更具描述性的。
答案 2 :(得分:1)
backgroundColor =“”能做什么吗?这会将颜色设置为默认颜色吗?如果是这种情况,那么作为重置颜色的方法就有意义了。
if(color){}
如果颜色为“”,将失败,但在第二种情况下,它将重置backgroundColor。
答案 3 :(得分:0)
如果颜色可以整数形式出现,则无法将背景设置为黑色(#000000
= 0
)。
答案 4 :(得分:0)
只应使用超过0个字符的字符串来明确设置颜色。
为什么呢?分配空字符串意味着将重置颜色(即将使用CSS定义的默认值),这是一个完全有效的用例。
您应该做的就是检查是否定义了color
,即
typeof color !== 'undefined'
或者如果它是一个字符串变量
// checks for primitive strings
typeof color === 'string'
// checks for primitive strings and string objects
typeof color === 'string' || color instanceof String
// checks for primitive strings and string objects, cross-frame safe
Object.prototype.toString.call(color) === '[object String]'
如果它可能包含不正确类型的值。
答案 5 :(得分:0)
if(typeof color =='string'&& color.length)
对于typeof足以使用“==”,如果typeof是string,那么它将检查color.length。否则,如果在检查第二个条件之前它将退出。我认为这是最完整的解决方案。
但是,如果你确定color是一个字符串变量并且在初始化之前定义了某个地方,那么你可以像你一样使用“if(color)”,但请记住,如果颜色没有在if语句的时刻,你会得到一个ReferenceError。