为什么" " .abcd返回未定义的值而不是在Javascript中抛出未定义的错误(但是Typescript会发出警告)

时间:2018-04-24 10:37:20

标签: javascript typescript

请在下面查看3个片段并告诉我它是如何工作的

Snippet 1

运行以下代码段时,我可以看到此错误Uncaught ReferenceError: aaa is not defined",。我知道因为我们没有定义aaa变量。



var a=aaa;




Snippet 2

此外,我在下面的代码段中收到\"string\".abcd is not a function"错误。



var a="string".abcd();




Snippet 3

  

但为什么下面的代码段不会引发错误Uncaught ReferenceError: abcd is not defined",?为什么"string".abcd返回undefined?



var a=" ".abcd;
console.log(a)




3 个答案:

答案 0 :(得分:5)

athing.something表示“从something获取名为athing的媒体资源。”

如果某个属性不存在,则其值为undefined

您新创建的字符串没有abdc属性。

您无法将其与Snippet 1进行比较,因为您正在处理属性,而不是变量。

你可以将它与Snippet 2进行比较,Snippet 2抱怨它不是一个函数 - undefined确实不是一个函数。

答案 1 :(得分:2)

因为" "是一个字符串,而javascript提供了一些默认属性,例如" ".length。因为没有默认的.abcd它只是说它是未定义的

答案 2 :(得分:1)

实际上它相当于:

var a = " ";
a.abcd;

它基本上检查String构造函数原型中的abcd属性。 Snippet因为您正在调用而出错:

undefined()