为什么'in'运算符使用字符串文字抛出错误而不是将其记录为false?

brk*_*brk 28 javascript string

根据MDNin操作员将返回true该属性是否存在,因此第一个示例记录为true。但是,当使用字符串文字时,为什么它会引发错误而不是记录为false?

let let1 = new String('test');
console.log(let1.length);
console.log('length' in let1)
Run Code Online (Sandbox Code Playgroud)

var let1 = 'test';
console.log(let1.length);
console.log('length' in let1);
Run Code Online (Sandbox Code Playgroud)

ben*_*nvc 40

从某种意义上说,这只是时间问题。字符串文字没有任何属性。可以在原始字符串上调用方法和查找属性的原因是,String当尝试进行方法调用或属性查找时,JavaScript自动将字符串原始包装在对象中。JavaScript不会将in运算符解释为方法调用或属性查找,因此不会将原语包装在对象中,并且会出现错误(因为字符串原语不是对象)。

请参见字符串基元和String对象之间的区别

另外,在您的问题中引用相同文档也特别指出,in在字符串基元上使用将引发错误。

您必须在in运算符的右侧指定一个对象。例如,您可以指定使用String构造函数创建的字符串,但不能指定字符串文字。

  • 这是显示的最短,最简洁的正确答案。 (5认同)

Ski*_*lGG 10

抛出,因为出错是对象的操作:

物体中的道具

但是,当您将字符串声明为```string(template)literal)或"" ''“,'stringliteral)时,您不会创建对象。

校验

typeof new String("x") (“宾语”)

typeof `x` (“串”)。

这是JavaScript中的两件事。