array[index] === undefined 是否总是与 typeof array[index] === 'undefined' 相同?

Is array[index] === undefined the always same as typeof array[index] === 'undefined'?

我需要查看在 Javascript 和 this answer 中是否有数组索引的条目用于使用(基本上我将其从 === 更改为 !==):

if(typeof arrayName[index] !== 'undefined')

IIUC 这与 `arrayName[index] !== 'undefined'?

相同

我对它进行了试验并且它有效,但我想确保我没有遗漏任何边缘情况?

更新

清除 WRT 给定的一些答案(运行 这在节点 9.11.2 上):

    let undefined = "Hello";
    console.log(undefined);
    let arrayName = [];
    if(arrayName[0] !== undefined) {
        console.log("Test passes");
        console.log("undefined is: ", undefined);
        console.log("arrayName[0] is: ", arrayName[0]);
    }

这会打印:

Hello
Test passes
undefined is:  Hello
arrayName[0] is:  undefined

所以答案似乎是 "No undefined could sometimes be redefind ..." ... 最好坚持使用 typeof array[index] === 'undefined',但正如某些人指出的那样,undefined 不能在全局范围内重新定义,因此应该相当安全使用较短的版本。

是的,有一个非常模糊的边缘情况:

let undefined = "confuse me!";

这意味着

 "confuse me!" === undefined

可能是true

typeof undefined === "undefined"

可能是false,但如果

 typeof arrayName[index] === "undefined" 

true 那么它肯定没有定义,但是它可能不是 undefined :)

但这很糟糕,你真的不必考虑。

if(typeof arrayName[index] !== 'undefined')

相同
if(arrayName[index] !== undefined) // without quotes

但不像你说的那样:

IIUC this is the same as `arrayName[index] !== 'undefined'?

if(arrayName[index] !== 'undefined') // this is not correct

How dangerous is it in JavaScript, really, to assume undefined is not overwritten?

Undefined 是一个全局变量,因此它的值可以重新分配。所以变量 undefined 可能无法取消定义。但是 typeof 一个未定义的值总是 return 'undefined',所以它在技术上更安全。实际上,大多数人不会重新分配 undefined,所以两者都有效。