- 错误的
- 0
- 无效的
- 不明确的
- 空字符串
我使用它们,但我仍然不知道上述列表中每个潜在客户的边际差异。我主要使用 0,false。但我遇到过许多使用未定义的空字符串的脚本。我想知道它们之间的确切区别。我知道这是一个愚蠢的问题,但如果我能得到一个简明扼要的答案,那就太好了。
我使用它们,但我仍然不知道上述列表中每个潜在客户的边际差异。我主要使用 0,false。但我遇到过许多使用未定义的空字符串的脚本。我想知道它们之间的确切区别。我知道这是一个愚蠢的问题,但如果我能得到一个简明扼要的答案,那就太好了。
如果您想知道如何引用它,则称为“真值和假值”。这是一个链接来解释您的问题的答案:http ://www.sitepoint.com/javascript-truthy-falsy/ (在阅读开头的链接时请记住 !!(value) 强制值为无论真假)
您拥有的列表是 javascript 中 6 个“虚假”值中的 5 个。如果在其中添加“NaN”,那么您将在 javascript 中拥有所有虚假值。所以完整的“虚假”列表是
1)0
2)""
3)false
4)undefined
5)null and
6)NaN
在“if”语句中使用时,它们的行为方式相同,因此
if(0)
if("")
if(false)
if(undefined)
if(null) and
if(NaN) would behave the same
您要求一个简短的回答,但我认为最好的方法是展示它如何与一些基本测试一起工作。为冗长的答案道歉
//Checking if all the "falsy" values evaluate the same way in a "if" statement
console.log("Checking if(0)");
if(0) {
console.log(" if(0) Will not be reached");
}
console.log('Checking if("")');
if("") {
console.log(' if("") Will not be reached');
}
console.log("Checking if(undefined)");
if(undefined) {
console.log("if(undefined) Will not be reached");
}
console.log("Checking if(null)");
if(null) {
console.log("if(null) Will not be reached");
}
console.log("Checking if(Nan)");
if(NaN) {
console.log("if(NaN) Will not be reached");
}
console.log("Checking if(false)");
if(false) {
console.log("if(false) Will not be reached");
}
//在if语句中检查所有假值是否相等(==)
if(0 == "") {
console.log('if(0 == "") is true');
}
if(0 == false) {
console.log("if(0 == false) is true");
}
if("" == false) {
console.log('if("" == false) is true');
}
if(0 == undefined) {
console.log("if(0 == undefined) Will not be reached");
}
if("" == null) {
console.log('if("" == null) Will not be reached');
}
if(undefined == null) {
console.log("if(undefined == null) is true");
}
if(NaN == "") {
console.log('if(NaN == "") Will not be reached');
}
//检查假值和假值之间的严格相等 if(undefined === false) { console.log("Will not bereach"); }
if(null === false) {
console.log("Will not be reached");
}
if(undefined ===false) {
console.log("Will not be reached");
}
if(0 === false) {
console.log("Will not be reached");
}
if("" === false) {
console.log("Will not be reached");
}
if(NaN === false) {
console.log("Will not be reached");
}
这意味着尽管这些“虚假”值可以在“if”语句中互换使用,但它们彼此并不相等(==)(特别是 0,"" 和其他三个的集合为 false)。如果使用更严格的 equals(====),则这些都不等于 false,因此分类可能是“falsy”而不是 false。
您提到的只有两个值是我所说的指定的“特殊值”。
null
- 在大多数情况下,这相当于不适用。undefined
- 的隐式版本null
两者的示例:
function findByTitle(arr, title)
{
for (var i = 0; i < arr.length; ++i) {
if (arr[i].title === title) {
return arr[i];
}
}
return null;
}
的返回值null
表示找不到记录,否则为对象。
function increment(x, by)
{
return x + (by || 1); // by may be undefined
}
increment(4); // 5
在这种情况下,by
参数没有被传递,所以 JavaScriptundefined
隐式传递它。我不建议将其分配给变量;相反,我会使用null
.
您提到的其他值并不是特别特别;它们可以用作起始值,例如构建字符串值或计算总和,但它们本身并不特殊。
""
是一个字符串false
是一个布尔值0
并且NaN
是数字类型就是区别。
false
是一个布尔值,0
是一个数字,null
是一个对象,undefined
是未定义的,''
是一个字符串。
您可以根据使用的类型来选择类型。例如:
// There is nothing wrong with this block of code
var num_cats = 7;
if(num_cats){
// num_cats is truthy
}
// This block works but it could be made more clear
var has_cat = num_cats;
if(has_cat){
// This would work, but it doesn't make sense. As a developer I would
// expect that has_cat should be either true or false, not 7.
// One way to convert the number to a boolean would be:
has_cat = !!num_cats
}
最容易混淆的两个错误值可能是null
和undefined
。
null
基本上意味着变量存在,但它的值是未知的。
undefined
表示该变量不存在(尽管可以将变量显式设置为未定义var x = undefined;
,然后该变量x
存在,但未明确定义,这意味着您可以将其视为不存在。