JS:分配 document.getElement... 不适用于 var/let(没有)
JS: assigning document.getElement... doesn't work with var/let (works without)
如果我这样做
x = document.getElementsByClassName("something")[0]
我得到了预期的结果。
但如果我这样做
var x = document.getElementsByClassName("something")[0]
或
let x = document.getElementsByClassName("something")[0]
我不确定。
这是为什么?
document.getElementsByClassName
将 return 数组命名为 HTMLCollection
请看这段代码,
var testElements = document.getElementsByClassName('test');
var testDivs = Array.prototype.filter.call(testElements, function(testElement){
return testElement.nodeName === 'DIV';
});
也可以查看详情here
声明一个变量不会return任何东西(即undefined
),但是分配一个变量return值。例如:
let x, y
x = y = 7 // this sets both x & y to seven
上面的行之所以有效,是因为 y = 7
return 是 y
的值,然后将其分配给 x
。但是你不能用变量声明做任何事情:
let x = 7
x = let y = 3 // syntax error
关键是声明一个变量不会 return 一个值,这就是为什么你在控制台(也在节点 REPL 中)看到它后面的 undefined
,但是赋值或其他值return 一个值将显示该值。
请注意,您可以这样做:
var x = document.getElementsByClassName("something")[0]
x // this line will return the value of x
如果我这样做
x = document.getElementsByClassName("something")[0]
我得到了预期的结果。
但如果我这样做
var x = document.getElementsByClassName("something")[0]
或
let x = document.getElementsByClassName("something")[0]
我不确定。
这是为什么?
document.getElementsByClassName
将 return 数组命名为 HTMLCollection
请看这段代码,
var testElements = document.getElementsByClassName('test');
var testDivs = Array.prototype.filter.call(testElements, function(testElement){
return testElement.nodeName === 'DIV';
});
也可以查看详情here
声明一个变量不会return任何东西(即undefined
),但是分配一个变量return值。例如:
let x, y
x = y = 7 // this sets both x & y to seven
上面的行之所以有效,是因为 y = 7
return 是 y
的值,然后将其分配给 x
。但是你不能用变量声明做任何事情:
let x = 7
x = let y = 3 // syntax error
关键是声明一个变量不会 return 一个值,这就是为什么你在控制台(也在节点 REPL 中)看到它后面的 undefined
,但是赋值或其他值return 一个值将显示该值。
请注意,您可以这样做:
var x = document.getElementsByClassName("something")[0]
x // this line will return the value of x