Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在对对象调用方法时删除`this`会产生不可预知的结果?_Javascript_Javascript Objects - Fatal编程技术网

Javascript 为什么在对对象调用方法时删除`this`会产生不可预知的结果?

Javascript 为什么在对对象调用方法时删除`this`会产生不可预知的结果?,javascript,javascript-objects,Javascript,Javascript Objects,以下截取的内容是从 请注意,我已从名称[0]之前删除了此。当我这样做时,Bob被输出为J?WTF?:| 代码里连大写字母“J”都没有?发生了什么事?在jsbin上,如果您执行控制台.log(名称),您将获得“jsbin输出”名称[0]因此是“J” name是全局变量。就这些。所以您正在访问第页的某个地方设置的变量。。尝试console.log(年龄)。您将得到未定义。如果没有此,名称将引用全局范围。打印出window.name,您将看到J的来源。在链接的代码段中,window.name的值是JS

以下截取的内容是从

请注意,我已从
名称[0]
之前删除了
。当我这样做时,
Bob
被输出为
J
?WTF?:|


代码里连大写字母“J”都没有?发生了什么事?

在jsbin上,如果您执行
控制台.log(名称)
,您将获得
“jsbin输出”
<代码>名称[0]因此是
“J”


name是全局变量。就这些。所以您正在访问第页的某个地方设置的变量。。尝试console.log(年龄)。您将得到未定义。如果没有
名称
将引用全局范围。打印出
window.name
,您将看到
J
的来源。在链接的代码段中,
window.name
的值是
JS Bin Output
(注意第0个字符是
J
)。@bigless是正确的
name[0]
在本例中是访问
window.name[0]
这是字符串`“JS Bin…”@CodeFinity,但您会在任何页面上发现类似的行为。
窗口
的所有属性都可以在浏览器中作为全局变量访问()。所以还有很多其他的例子,比如
length
或者
location
@bigless
console.log(age)
应该抛出一个引用错误,而不是输出
undefined
,除非有一个名为
age
的全局(或任何其他可访问的作用域)的值
undefined
。这并不能解释为什么会有差异(例如属性引用与标识符解析)。是的,这一切都是JSBin奇怪的结果。是的,这几乎消除了我对JSBin的困惑。事实上,我没有在普通的VS代码中尝试它——只有在那里,否则我可能会发现它。
const person = {
  name: ['Bob', 'Smith'],
  age: 32,
  gender: 'male',
  interests: ['music', 'skiing'],
  bio: function() {
    console.log(name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');
  },
  greeting: function() {
    alert('Hi! I\'m ' + name[0] + '.');
  }
};

person.bio();
person.greeting();