javascript变量返回奇怪的输出

javascript变量返回奇怪的输出,javascript,Javascript,我是新来的,不熟悉Javascript。当我将值输出到控制台时,这里出现了一个奇怪的问题。据我所知,在这两种情况下,名称和颜色都是object car的属性,要访问它们,我们需要使用this.propertyName或object.propertyName,但当我将这些值输出到控制台而不使用this或object name时,第一个console.log返回空字符串,另一个返回未捕获的引用错误。它们是否指向窗口对象?那么在这两种情况下,它都应该返回一个未捕获的引用,这里有人能澄清一下吗。。提前感

我是新来的,不熟悉Javascript。当我将值输出到控制台时,这里出现了一个奇怪的问题。据我所知,在这两种情况下,名称和颜色都是object car的属性,要访问它们,我们需要使用this.propertyName或object.propertyName,但当我将这些值输出到控制台而不使用this或object name时,第一个console.log返回空字符串,另一个返回未捕获的引用错误。它们是否指向窗口对象?那么在这两种情况下,它都应该返回一个未捕获的引用,这里有人能澄清一下吗。。提前感谢。:)

尝试
console.log(this.name)
console.log(this.color)

来自MDN的其他信息

当函数作为对象的方法调用时,它的this设置为 调用该方法的对象

在下面的示例中,当调用o.f()时,在函数内部 这是绑定到o对象的

资料来源:

尝试
console.log(this.name)
console.log(this.color)

来自MDN的其他信息

当函数作为对象的方法调用时,它的this设置为 调用该方法的对象

在下面的示例中,当调用o.f()时,在函数内部 这是绑定到o对象的

资料来源:


输出
name
时不会出现
ReferenceError
的原因是浏览器有一个:它是当前窗口的名称。但是它们没有一个名为
color
的内置全局设置,因此您会得到错误


要在使用
car.log()
时访问对象上的
name
color
,您需要使用
this.name
this.color

输出
name
时,您没有得到
引用错误的原因是浏览器有一个:它是当前窗口的名称。但是它们没有一个名为
color
的内置全局设置,因此您会得到错误


当您使用
car.log()
时,要访问对象上的
name
color
,您应该使用
this.name
this.color

是的,您是正确的,两个都应该抛出未捕获的引用,但请稍候

实际上,window上有一个属性是。。嗯名称

所以实际上你可以控制窗口的属性。。我的名字


。。第二个是正确的。。未捕获引用

是的,您是对的,两个都应该抛出未捕获引用,但请稍候

实际上,window上有一个属性是。。嗯名称

所以实际上你可以控制窗口的属性。。我的名字


。。第二个是正确的。。未捕获引用

我想你的意思是
this.color
。我想你的意思是
this.color
。变量
name
color
在你的作用域中不存在,所以JavaScript在外部作用域中查找,然后在全局作用域中查找。您的
name
实际上指的是
窗口。name
@RocketHazmat谢谢您变量
name
color
在您的作用域中不存在,因此JavaScript在外部作用域和全局作用域中查找它们。您的
名称
实际上指的是
窗口。name
@RocketHazmat谢谢您此全局
名称
窗口不同。name
,是吗?因为如果我们在这段代码中用window.name替换name,我们会得到未定义的名称。@MohitBhardwaj:是的,它是,而且不是,
window.name
不会是
未定义的(前提是这是默认的
窗口
全局,而不是其他东西)。是的,对不起,你是对的。它是
窗口。名称
,它控制空白字符串而不是
未定义的
。谢谢:)@T.J.Crowder我真的很感谢你的回答。将window.name设置为空字符串有什么特殊用途吗?@seshukumar:这只是默认设置。如果使用命名它的链接打开该名称,例如:
(该窗口的名称将是
“wnd42”
),或通过
窗口。打开(
窗口。打开(
窗口(“…”,“wnd42”)
)。此全局
名称与
窗口不同。名称是不是?因为如果我们在这段代码中用window.name替换name,我们会得到未定义的名称。@MohitBhardwaj:是的,它是,而且不是,
window.name
不会是
未定义的(前提是这是默认的
窗口
全局,而不是其他东西)。是的,对不起,你是对的。它是
窗口。名称
,它控制空白字符串而不是
未定义的
。谢谢:)@T.J.Crowder我真的很感谢你的回答。将window.name设置为空字符串有什么特殊用途吗?@seshukumar:这只是默认设置。如果使用命名该名称的链接打开该名称,例如:
(该窗口的名称将是
“wnd42”
),或通过
窗口。打开(
窗口。打开(“…”,“wnd42”)
)。
var car = {
    name : "ford",
    color:"red",
    log : function(){

         console.log(name);
        // outputs an empty string

         console.log(color); 
        // Returns error (this.js:8 Uncaught ReferenceError: color is not defined)

    }
}

car.log();