【问题标题】:JS: assigning document.getElement... doesn't work with var/let (works without)JS:分配 document.getElement... 不适用于 var/let(不使用)
【发布时间】:2020-11-14 03:42:10
【问题描述】:

如果我这样做

x = document.getElementsByClassName("something")[0]

我得到了预期的结果。

如果我这样做了

var x = document.getElementsByClassName("something")[0]

let x = document.getElementsByClassName("something")[0]

我不确定。

这是为什么呢?

【问题讨论】:

  • 你是说在控制台中粘贴这些行吗?
  • 我不认为这是问题所在。你可以给我们看minimal reproducible example吗?最好是堆栈 sn-p?
  • 我猜你正在控制台中执行此操作。控制台的输出有一些怪癖,最好在适当的沙箱或实际的 JS 文件中进行编码
  • 这确实有效 - 它只是不输出变量的值。您仍然可以正常使用该变量。
  • 用 var/let 执行它会给你定义一个变量(未定义)的结果。试试var x=7; x=3。第一个将返回undefined,第二个将返回值3。第一个是声明变量的结果,第二个是赋值的结果

标签: javascript var let


【解决方案1】:

document.getElementsByClassName 将返回名为HTMLCollection 的数组

请看一下这段代码,

var testElements = document.getElementsByClassName('test');
var testDivs = Array.prototype.filter.call(testElements, function(testElement){
  return testElement.nodeName === 'DIV';
});

也可以查看详情here

【讨论】:

  • 还提到这是一个“实时”集合。不仅仅是快照
【解决方案2】:

声明变量不会返回任何内容(即undefined),但是分配变量确实会返回值。例如:

let x, y
x = y = 7  // this sets both x & y to seven

上面的行有效,因为y = 7 返回y 的值,然后将其分配给x。但是你不能对变量声明做任何事情:

let x = 7
x = let y = 3  // syntax error

关键是声明变量不会返回值,这就是为什么您在控制台(也在节点 REPL)中看到 undefined 的原因,但是返回值的赋值或其他值将显示该值。

请注意,您可以这样做:

var x = document.getElementsByClassName("something")[0]
x   // this line will return the value of x

【讨论】:

    猜你喜欢
    • 2017-05-30
    • 2015-06-21
    • 2020-11-04
    • 2018-05-30
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    相关资源
    最近更新 更多