5
  1. 错误的
  2. 0
  3. 无效的
  4. 不明确的
  5. 空字符串

我使用它们,但我仍然不知道上述列表中每个潜在客户的边际差异。我主要使用 0,false。但我遇到过许多使用未定义的空字符串的脚本。我想知道它们之间的确切区别。我知道这是一个愚蠢的问题,但如果我能得到一个简明扼要的答案,那就太好了。

4

4 回答 4

2

如果您想知道如何引用它,则称为“真值和假值”。这是一个链接来解释您的问题的答案:http ://www.sitepoint.com/javascript-truthy-falsy/ (在阅读开头的链接时请记住 !!(value) 强制值为无论真假)

于 2013-07-04T07:22:05.920 回答
0

您拥有的列表是 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。

于 2013-07-04T14:35:43.523 回答
0

您提到的只有两个值是我所说的指定的“特殊值”。

  • 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是数字
于 2013-07-04T08:21:58.143 回答
0

类型就是区别。

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 
}

最容易混淆的两个错误值可能是nullundefined

null基本上意味着变量存在,但它的值是未知的。 undefined表示该变量不存在(尽管可以将变量显式设置为未定义var x = undefined;,然后该变量x存在,但未明确定义,这意味着您可以将其视为不存在。

于 2013-07-04T07:21:54.860 回答