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']
可读性强得多。(它们都访问相同的变量)
数组表示法
使用数组表示法有三个主要原因:
phonelist[customerServiceID]
,其中customerServiceID
是一个变量,可以是数字或字符串)
在您的具体示例中,完全没有区别。它们都访问相同的变量 然而,每种方法都有优点和缺点 点符号 就我个人而言,我在每次不需要使用数组表示法的时候都使用点表示法。使用分隔每个对象级别的
,它的可读性要高得多
office.employees[0].empNumber
比office['employees'][0]['empNumber']
可读性强得多。(它们都访问相同的变量)
数组表示法
使用数组表示法有三个主要原因:
phonelist[customerServiceID]
,其中customerServiceID
是一个变量,可以是数字或字符串)
当字符串不包含任何不能在标识符中使用的字符时,按名称访问属性与使用字符串之间没有区别 请注意,如果变量不存在,则编写代码时就好像变量是在
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”
您是对的@纳奥米克在回答中也指出了这一点。为了完整起见,我会把它包括在我的答案中。