Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么用数组表示法而不是点表示法检查变量的存在?_Javascript - Fatal编程技术网

Javascript 为什么用数组表示法而不是点表示法检查变量的存在?

Javascript 为什么用数组表示法而不是点表示法检查变量的存在?,javascript,Javascript,我正在看,它从以下内容开始: if (!window['YT']) { var YT = { loading: 0, loaded: 0 }; } if (!window['YTConfig']) { var YTConfig = { 'host': 'http://www.youtube.com' }; } 我不明白为什么变量检查不使用点符号,例如: if (!window.YT) { var YT =

我正在看,它从以下内容开始:

if (!window['YT']) {
    var YT = {
        loading: 0,
        loaded: 0
    };
}

if (!window['YTConfig']) {
    var YTConfig = {
        'host': 'http://www.youtube.com'
    };
}
我不明白为什么变量检查不使用点符号,例如:

if (!window.YT) {
    var YT = {
        loading: 0,
        loaded: 0
    };
}

if (!window.YTConfig) {
    var YTConfig = {
        'host': 'http://www.youtube.com'
    };
}

这只是个人喜好吗?还是有影响?

在这个具体的例子中没有影响

使用数组表示法的常见原因是字符串包含特殊字符

// something like
obj["hello world"]

// or like
obj["hello-world"]
另一个原因是,如果要访问的键是一个变量

var foo = "hello";
obj[foo] === obj.hello;
否则

// these are the same
obj.foo === obj["foo"]

此特定示例中没有任何含义

使用数组表示法的常见原因是字符串包含特殊字符

// something like
obj["hello world"]

// or like
obj["hello-world"]
另一个原因是,如果要访问的键是一个变量

var foo = "hello";
obj[foo] === obj.hello;
否则

// these are the same
obj.foo === obj["foo"]

在您的具体示例中,完全没有区别。它们都访问相同的变量

然而,每种方法都有优点和缺点

点符号 就我个人而言,我在每次不需要使用数组表示法的时候都使用点表示法。使用分隔每个对象级别的
,它的可读性要高得多

office.employees[0].empNumber
office['employees'][0]['empNumber']
可读性强得多。(它们都访问相同的变量)

数组表示法 使用数组表示法有三个主要原因:

  • 访问编号索引数组时(员工[0]、员工[1]、…)

  • 当您需要使用变量作为键时(
    phonelist[customerServiceID]
    ,其中
    customerServiceID
    是一个变量,可以是数字或字符串)

  • 正如@naomik在他的回答中指出的,作为键的特殊字符也会使您需要使用数组表示法


  • 在您的具体示例中,完全没有区别。它们都访问相同的变量

    然而,每种方法都有优点和缺点

    点符号 就我个人而言,我在每次不需要使用数组表示法的时候都使用点表示法。使用分隔每个对象级别的
    ,它的可读性要高得多

    office.employees[0].empNumber
    office['employees'][0]['empNumber']
    可读性强得多。(它们都访问相同的变量)

    数组表示法 使用数组表示法有三个主要原因:

  • 访问编号索引数组时(员工[0]、员工[1]、…)

  • 当您需要使用变量作为键时(
    phonelist[customerServiceID]
    ,其中
    customerServiceID
    是一个变量,可以是数字或字符串)

  • 正如@naomik在他的回答中指出的,作为键的特殊字符也会使您需要使用数组表示法


  • 当字符串不包含任何不能在标识符中使用的字符时,按名称访问属性与使用字符串之间没有区别

    请注意,如果变量不存在,则编写代码时就好像变量是在
    if
    语句中创建的一样。变量实际上总是存在的,因为声明被提升到范围的开头,所以
    if
    语句只检查变量是否包含falsy值

    代码的作者可能认为,通过使用字符串访问变量来检查变量的存在性会更安全,但没有这种区别。在这种情况下,不需要任何这样的警告,因为变量肯定总是存在的

    该代码相当于:

    var YT, YTConfig;
    
    if (!YT) {
      YT = {
        loading: 0,
        loaded: 0
      };
    }
    
    if (!YTConfig) {
      YTConfig = {
        'host': 'http://www.youtube.com'
      };
    }
    

    如果在此代码之前确实存在任何变量,则此处该变量的声明将被忽略,即该变量不会被重复声明重新声明。

    当字符串不包含任何不能在标识符中使用的字符时,按名称或使用字符串访问属性之间没有区别

    请注意,如果变量不存在,则编写代码时就好像变量是在
    if
    语句中创建的一样。变量实际上总是存在的,因为声明被提升到范围的开头,所以
    if
    语句只检查变量是否包含falsy值

    代码的作者可能认为,通过使用字符串访问变量来检查变量的存在性会更安全,但没有这种区别。在这种情况下,不需要任何这样的警告,因为变量肯定总是存在的

    该代码相当于:

    var YT, YTConfig;
    
    if (!YT) {
      YT = {
        loading: 0,
        loaded: 0
      };
    }
    
    if (!YTConfig) {
      YTConfig = {
        'host': 'http://www.youtube.com'
      };
    }
    

    如果在此代码之前确实存在任何变量,则此处该变量的声明将被忽略,也就是说,变量不会被重复声明重新声明。

    在这种情况下是个人偏好。在这种情况下是个人偏好。使用数组表示法有三个主要原因:您给出的两个以及键包含作为变量名无效的字符时。例如,键
    “customerService-id”
    您是对的@纳奥米克在回答中也指出了这一点。为了完整起见,我将把它包括在我的答案中。使用数组表示法有三个主要原因:您给出的两个原因,以及当键包含作为变量名无效的字符时。例如,键
    “customerService-id”
    您是对的@纳奥米克在回答中也指出了这一点。为了完整起见,我会把它包括在我的答案中。