Javascript 将.split()结果赋值给名为';名称';

Javascript 将.split()结果赋值给名为';名称';,javascript,Javascript,我在Firefox控制台中使用JS的split()string方法进行了一些测试。在测试过程中,我做了以下工作: test = 'first second third'.split(' ') -> Array [ "first", "second", "third" ] test -> Array [ "first", "second", "third" ] name = 'first second third'.split(' ') -> Array [ "first", "

我在Firefox控制台中使用JS的
split()
string方法进行了一些测试。在测试过程中,我做了以下工作:

test = 'first second third'.split(' ')
-> Array [ "first", "second", "third" ]
test
-> Array [ "first", "second", "third" ]
name = 'first second third'.split(' ')
-> Array [ "first", "second", "third" ]
name
-> "first,second,third"
我注意到,每次调用
split()
方法时,它都返回一个
数组
,但是如果我将它保存在一个名为
name
的变量中,那么它就被保存为
字符串
而不是
数组


为什么会发生这种情况?

编辑,正如评论者正确指出的那样,这不是关于
函数.name
,而是关于
窗口.name

很好,上面的注释部分正确,
name
不是保留字,但它可能会导致问题,因为它是依赖于实现的JavaScript对象、方法或属性的预定义名称之一。也许这应该是一个保留字

资料来源:

具体来说,它是
窗口
对象的一部分

__proto__ Property Names in Object Initializers:
If IsAnonymousFunctionDefinition(AssignmentExpression) is true, then
Let hasNameProperty be HasOwnProperty(propValue, "name").
ReturnIfAbrupt(hasNameProperty).
If hasNameProperty is false, perform SetFunctionName(propValue, propKey).
以下是相关步骤:


请注意最后一个else,其中“name”将连接成一个字符串。

由于其定义方式,此问题将仅来自
窗口。name
。如果在函数中使用变量
name
,则不会遇到此问题


如果您想了解
window.name
如何将数组的输出更改为字符串,下面是我制作的一个快速示例:.

要添加到JordanHendrix的答案中,请更具体一点:

name
这里是–每个窗口对象都具有的属性,它主要与链接或表单上的
target
属性结合使用


由于该属性只接受字符串值,所以必须将split返回的数组转换回字符串值。这是通过隐式调用其方法实现的,该方法的作用是将所有数组值连接在一起,用逗号分隔。

WTF是否对此进行了否决?(+1,从我这里算起)这比公认的答案更正确——因为这不是关于函数,而是关于窗口对象及其名称属性。现在是插入
严格模式
并确保始终声明自己的变量的好时机。“设置为名称的所有内容都将是字符串!”–如果这真的是关于
Function.name
,那么您不能对其“设置”任何内容,因为正如您所引用的,“此属性具有属性{[[Writable]]:false”“注意,当您只键入name而不在控制台中执行任何其他操作时,它将返回一个空字符串”–仅当window对象未获得名称集时(当然,大多数情况下都是这样,因为我们留下了框架集…。但是创建一个包含
的简单文档,单击该链接–然后在打开的新窗口中,再次在控制台中键入
name
。“foobar”
SetFunctionName (F, name, prefix)
If Type(name) is Symbol, then
Let description be name’s [[Description]] value.
If description is undefined, let name be the empty String.
Else, let name be the concatenation of "[", description, and "]".