【问题标题】: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
  • 我怀疑这收到了反对票,因为您应该使用 RTFM。
  • 意思是“阅读友好手册”

标签: javascript typescript


【解决方案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()
      

      【讨论】:

        猜你喜欢
        • 2014-04-17
        • 1970-01-01
        • 2014-09-12
        • 2013-12-05
        • 2014-07-09
        • 2018-07-09
        • 2022-11-02
        • 2014-05-30
        • 2018-11-15
        相关资源
        最近更新 更多