为啥“”.abcd 返回未定义的值而不是在 Javascript 中抛出未定义的错误(但 Typescript 抛出警告)
Posted
技术标签:
【中文标题】为啥“”.abcd 返回未定义的值而不是在 Javascript 中抛出未定义的错误(但 Typescript 抛出警告)【英文标题】:why " ".abcd is returning undefined value instead of throwing undefined error in Javascript (But Typescript throwing a warning)为什么“”.abcd 返回未定义的值而不是在 Javascript 中抛出未定义的错误(但 Typescript 抛出警告) 【发布时间】:2018-10-04 14:10:20 【问题描述】:请检查以下 3 个 sn-ps 并告诉我它是如何工作的
片段 1
我可以在运行下面的 sn-p 时看到这个错误Uncaught ReferenceError: aaa is not defined",
。我知道是因为我们没有定义 aaa
变量。
var a=aaa;
片段 2
而且我在 sn-p 下方收到\"string\".abcd is not a function"
错误。
var a="string".abcd();
片段 3
但是为什么下面的 sn-p 不会抛出像
Uncaught ReferenceError: abcd is not defined",
这样的错误?为什么"string".abcd
返回未定义?
var a=" ".abcd;
console.log(a)
【问题讨论】:
因为这正是该语言的设计方式。 访问未定义的属性返回undefined
。
期待强制:***.com/questions/7675127/…
我怀疑这收到了反对票,因为您应该使用 RTFM。
意思是“阅读友好手册”
【参考方案1】:
athing.something
表示“从athing
获取名为something
的属性”。
如果属性不存在,则其值为undefined
。
您新创建的字符串没有abdc
属性。
您无法将其与 Snippet 1 进行比较,因为您处理的是属性,而不是变量。
您可以将其与 Snippet 2 进行比较,后者抱怨它不是函数 - undefined
确实不是函数。
【讨论】:
【参考方案2】:因为" "
是一个字符串,而javascript 提供了一些默认属性,例如" ".length
。因为没有默认的.abcd
它只是说它是未定义的
【讨论】:
【参考方案3】:其实相当于:
var a = " ";
a.abcd;
它基本上检查 String 构造函数原型中的 abcd 属性。 Snippet 给出错误,因为您正在调用:
undefined()
【讨论】:
以上是关于为啥“”.abcd 返回未定义的值而不是在 Javascript 中抛出未定义的错误(但 Typescript 抛出警告)的主要内容,如果未能解决你的问题,请参考以下文章