var z = 1,
y = z = typeof y;
console.log(z); // >> 'string'
为什么z的值是字符串。
答案 0 :(得分:0)
它正在提升变量的声明,其值为'undefined'
。
var z, y;
z = 1,
y = z = typeof y;
console.log(z, typeof z);
console.log(y, typeof y);

答案 1 :(得分:0)
你得到string
是正常的,因为你在z
中存储了typeof y
表达式的结果,它会给你一个包含类型的字符串你的对象。
请考虑以下事项:
var a = typeof undefined;
console.log(a); // returns "undefined" which is string.
答案 2 :(得分:0)
如果您只运行此代码,则z
的值为"undefined"
。如果您多次运行,z
的值将为"string"
。
故障:
var z = 1, y = z = typeof y;
console.log(z); // >> 'string'
按以下顺序执行:
z
。 z
的值为1
。typeof y
。此评估结果为"undefined"
,因为y
的值为undefined
。z = "undefined"
。 z
的值为"undefined"
。y = "undefined"
。 y
的值为"undefined"
。z
的值。这会记录undefined
。第二次运行,你得到:
z
。 z
的值为1
。typeof y
。此评估结果为"string"
,因为y
的值为"undefined"
。z = "string"
。 z
的值为"string"
。y = "string"
。 y
的值为"string"
。z
的值。这会记录string
。答案 3 :(得分:0)
返回undefined
字符串,因为您将typeof y
的结果分配给z
变量,此时未定义y
。另请注意,typeof
运算符始终返回指示类型的字符串。
答案 4 :(得分:0)
您的代码幕后发生的事情如下:
var z = undefined;
var y = undefined;
z = 1;
console.log(z) // z is now 1
z = typeof y
console.log(z) // undefined
console.log(y) // undefined
y = z
console.log(z) // undefined
console.log(y) //undefined
不要被未定义的结果欺骗并将其视为字符串。
console.log(typeof undefined) // "undefined"
console.log(typeof "undefined") // string
Undefiend是一种类型,除非你在这种情况下明确地指定为“undefined”,引号使它成为一个字符串
在您抛出“string”的情况下,您必须使用console.log(typeof z)并抛出字符串,因为您已将z指定为“undefined”而非未定义