我在Firefox的控制台中使用JS的split()
字符串方法进行了一些测试。在测试时我做了以下事情:
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()
方法时,它都会返回Array
,但如果我将其保存在名为name
的变量中,则会将其另存为string
而不是Array
。
为什么会这样?
答案 0 :(得分:2)
此问题仅来自window.name
,因为它定义了setter和/或getter。如果在函数中使用变量name
,则不会遇到此问题。
如果您想知道window.name
如何将数组的输出更改为字符串,请参考以下示例:JSFiddle。
答案 1 :(得分:2)
添加JordanHendrix的答案,并且更具体一点:
target
这里是window.name
- 每个窗口对象都有一个属性,主要与链接或表单上的<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<SurfaceView
android:id="@+id/surfaceview"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="1" >
<Button
android:id="@+id/startcamerapreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="Show Preview" />
<Button
android:id="@+id/stopcamerapreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="Stop Preview" />
</LinearLayout>
</LinearLayout>
属性结合使用。
因为该属性只接受字符串值,所以拆分返回的数组必须转换回字符串值。这种情况通过隐式调用其toString
方法 - 以及该方法的作用,将所有数组值连接在一起,用逗号分隔。
答案 2 :(得分:1)
编辑,正如评论者正确指出的那样,这不是Function.name
,而是window.name
。
很好,上面的注释部分正确,name
不是保留字,但它可能会导致问题,因为它是依赖于实现的JavaScript对象,方法或属性的预定义名称之一。也许它应该是一个保守的词。
具体来说,它是window
对象的一部分。
__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).
以下是相关步骤:Spec for name
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 "]".
注意最后一个,其中'name'将连接成一个字符串。