Javascript 数组[index]==未定义是否始终与数组[index]===的类型相同;未定义';?

Javascript 数组[index]==未定义是否始终与数组[index]===的类型相同;未定义';?,javascript,arrays,node.js,typescript,v8,Javascript,Arrays,Node.js,Typescript,V8,我需要查看Javascript中是否有数组索引条目,并告诉用户(实际上我将其从===更改为!==): if(数组名称的类型[索引]!=='undefined') IIUC这与'arrayName[index]!='未定义的' 我用它做过实验,效果很好,但我想确保我没有遗漏任何边缘情况 更新 要使WRT对给出的一些答案进行澄清(在节点9.11.2上运行此操作),请执行以下操作: 这张照片是: Hello Test passes undefined is: Hello arrayName[0] i

我需要查看Javascript中是否有数组索引条目,并告诉用户(实际上我将其从===更改为!==):

if(数组名称的类型[索引]!=='undefined')

IIUC这与'arrayName[index]!='未定义的'

我用它做过实验,效果很好,但我想确保我没有遗漏任何边缘情况

更新 要使WRT对给出的一些答案进行澄清(在节点
9.11.2
上运行此操作),请执行以下操作:

这张照片是:

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

所以答案似乎是“没有未定义的东西有时可以被重新发现…”。。。最好还是坚持使用数组的类型[index]==“undefined”,但正如一些人所指出的,undefined不能全局重新定义,因此使用较短的版本应该是相当安全的。

是的,有一个非常模糊的edgecase:

let undefined = "confuse me!";
也就是说

 "confuse me!" === undefined
可能是
true

typeof undefined === "undefined"
可能是
false
,但如果

 typeof arrayName[index] === "undefined" 
如果
为true
则其定义未定义,但它可能不是
未定义
:)


虽然这很糟糕,但你不必考虑这一点。

<是的,有一个非常晦涩难懂的词:

let undefined = "confuse me!";
if(typeof arrayName[index] !== 'undefined')
也就是说

 "confuse me!" === undefined
可能是
true

typeof undefined === "undefined"
可能是
false
,但如果

 typeof arrayName[index] === "undefined" 
如果
为true
则其定义未定义,但它可能不是
未定义
:)

但是这很糟糕,你不必考虑。< / P>
if(typeof arrayName[index] !== 'undefined')

if(arrayName[index] !== undefined) // without quotes
但并非如你所说:

IIUC这与'arrayName[index]!='未定义的'


if(arrayName[index] !== undefined) // without quotes
但并非如你所说:

IIUC这与'arrayName[index]!='未定义的'




未定义是一个全局变量,因此可以重新分配其值。因此,变量
未定义
可能无法定义。但是
typeof
未定义的值总是返回
“未定义的”
,因此在技术上更安全。实际上,大多数人不会重新分配
undefined
,因此这两种方法都有效。

undefined是一个全局变量,因此可以重新分配其值。因此,变量
未定义
可能无法定义。但是
typeof
未定义的值总是返回
“未定义的”
,因此在技术上更安全。实际上,大多数人不会重新分配
undefined
,所以这两种方法都可以。

OK-所以Javascript允许我们使用Javascript
undefined
作为变量名,因此建议显式使用“undefined”…@ole no,这意味着
“让我困惑!”===undefined
可能是
true
并且
类型的undefined===“undefined”
可能是false,但是如果
类型的arrayName[index]===“undefined”
则其定义为
未定义的
,但这会引发错误
“undefined”已经声明了
@HikmatGurbanli刚刚在节点中尝试过,我很惊讶地说这是正确的。旧版本当然不是这样。@hikmat然后将其包装在一个block.OK中-因此Javascript允许我们使用Javascript
undefined
作为变量名,因此建议显式使用“undefined”…@ole no,这意味着
“迷惑我!”===undefined
可能是
true
并且
类型的undefined===“undefined”
可能是false,但是如果
类型的arrayName[index]===“undefined”
则其定义为
未定义的
,但这会引发错误
“undefined”已经声明了
@HikmatGurbanli刚刚在节点中尝试过,我很惊讶地说这是正确的。以前的版本肯定不是这样的。@hikmat然后将其包装在一个块中。前两个不同
typeof
返回字符串alwaysYeah,my bad,copy pasted,忘记删除
typeof
,编辑。这在技术上是不正确的,根据引号的语法,它们不是等价的。我的回答解释了原因。你应该再读一遍我的回答,我的第二句话没有引用。你错了,它们是等价的。告诉我一个例子,其中
(数组名称的类型[索引]!=='undefined')!==(arrayName[index]!==undefined)
,除非@Jonas描述了边缘情况,否则您将无法找到,但在现实世界中,您将无法找到它。前两种情况并不相同
typeof
返回字符串alwaysYeah,my bad,copy pasted,忘记删除
typeof
,编辑。这在技术上是不正确的,根据引号的语法,它们不是等价的。我的回答解释了原因。你应该再读一遍我的回答,我的第二句话没有引用。你错了,它们是等价的。告诉我一个例子,其中
(数组名称的类型[索引]!=='undefined')!==(arrayName[index]!==未定义)
,除非@Jonas描述了边缘大小写,但在现实世界中,如果你担心
未定义的
在某个地方被重新定义,你就不能使用
void 0
。如果你担心
未定义的
在某个地方被重新定义,就使用
void 0