如何在Javascript中评估非字符串文字?

时间:2018-03-22 08:58:15

标签: javascript

当检查字符串上的length属性时,我犯了一个错误并忘记了length周围的引号。而不是错误,其中一个字符出现在字符串中。

const string = 'name'
s[length]
>> "a"

我做了其他组合,通常会收到第二封信。那么单词length被转换为布尔值,然后转换为数字?或者,还有其他事情发生了吗?

更新。这就是我所做的一切:

const a = [1,2,3]
>> undefined
a["length"]
>> 3
const s = 'name'
>> undefined
s[length]
>> "a"
s['length']
>> 4
length
>> 1
a[length]
>> 2

3 个答案:

答案 0 :(得分:4)

在默认范围内,长度将评估为window.length,这是窗口中的帧数或iframe数(通常为0,但在您的情况下可能为1?)

编辑:快速查看更新后问题中不同示例的含义。

const a = [1,2,3]; // Array of length 3
a["length"];       // equals a.length , 3
const s = 'name';  // String of length 4
s[length];         // s[window.length], s[1], 'a'
s['length'];       // equals s.length, 4
length;            // equals window.length, 1
a[length]          // equals a[window.length], a[1] , 2

答案 1 :(得分:1)

不是答案,而是一般建议:

使用s.length代替s['length']

你避免了刚遇到的错误。

当我访问普通旧数组中的值或者我需要使用编译器不喜欢的变量或属性名称时,我个人只使用方括号(即s[myVar]s['some-property'])。

答案 2 :(得分:0)

通常你会s.length,因为长度是String的属性。

如果您的代码中某处有length变量,那么它会被整数化。

如果没有,则undefined将转换为整数。

s[length]在您的情况下转换为s[0]