【问题标题】:Javascript difference between typeof undefined and void? [duplicate]typeof undefined和void之间的Javascript区别? [复制]
【发布时间】:2015-04-05 01:12:57
【问题描述】:

在做一些打字稿时,我遇到了我以前在 javascript 中没见过的东西。

constructor(public x: number = 0, public y: string = "none"){
        this.color = "red";
    }

那部分正在编译成:

    if (x === void 0) { x = 0; }
    if (y === void 0) { y = "none"; }

但不应该是typeof x === 'undefined'吗?如果不是,哪个更好,为什么?

谢谢

【问题讨论】:

  • void 0 给出值undefined,但输入较少。 (当然,在您的情况下,您没有手动输入。)所以x === void 0 就像说x === undefined 但略短。 typeof x === 'undefined' 是测试同一件事的漫长道路,只有在您不确定是否已声明 x 变量时才需要 - 但在这种情况下,您肯定知道它 is 已声明因为它是一个函数参数。
  • @nnnnnn 如果您添加更多细节/参考来解释为什么void 0 === undefined OP,似乎这可能值得提升为答案。
  • 在现代 JavaScript 解释器中没有任何有意义的区别。
  • @Pointy 是的,我知道(假设没有愚蠢的重新定义)但显然 OP 还没有......我懒得挖掘链接,此外,nnnnnn 让我接受它。假设我现在应该挖一个:stackoverflow.com/a/4806358/156755
  • @nnnnnn 我确实看到了这个链接,现在它确实更有意义了,但我只是对此感到困惑,因为在我的本地编译器中,打字稿与 typeof x === 'undefined' 一起使用,但在现场操场上使用 @987654333 @这让我很想知道是否存在真正有意义的差异

标签: javascript


【解决方案1】:

存在差异。

如果您正在检查全局变量 x, 然后typeof x === 'undefined' 将返回truex === void 0 抛出ReferenceError
您需要使用window.x === void 0 来获取true。但是在这种情况下,它知道x 至少会被设置为undefined,因为它是一个函数参数,所以这个错误永远不会成为问题。

我认为为了可读性,我更喜欢使用typeof x === 'undefined'

【讨论】:

  • 你认为typeof x === 'undefined' more 可读吗?为了健全的编程实践,我永远不会这样做。获得ReferenceError 是很有价值的信息。
  • @Wio 现在我相信 MS 在更改为 void 以测试变量时采取了正确的方法......看这里 typeofnan.blogspot.com/2011/01/typeof-is-fast.html 看起来这种方式要快得多,所以我猜猜这种方式更好,你不觉得吗?
  • 当我将undef 更改为void 0 时,我看到typeof 获胜。我说typeof x === 'undefined' 更具可读性,因为对undefined 的熟悉程度要高于对void 的熟悉程度。
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 2015-09-26
  • 1970-01-01
  • 2018-03-05
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多