Javascript 为什么document.getElementById(';foo';).value不是引用?

Javascript 为什么document.getElementById(';foo';).value不是引用?,javascript,error-handling,reference,referenceerror,Javascript,Error Handling,Reference,Referenceerror,我正在使用以下功能,我很喜欢它: var$=function(id){returndocument.getElementById(id);} 对于我当前的代码,我只引用了每个元素的值 所以我想,“为什么不更新我的函数以包含.value 所以这很好: var $ = function( id ) { return document.getElementById( id ); }; $("foo").value = whatever // WORKS JUST FINE :) 但这打破了: va

我正在使用以下功能,我很喜欢它:
var$=function(id){returndocument.getElementById(id);}

对于我当前的代码,我只引用了每个元素的

所以我想,“为什么不更新我的函数以包含
.value

所以这很好:

var $ = function( id ) { return document.getElementById( id ); };
 $("foo").value = whatever // WORKS JUST FINE :)
但这打破了:

var $ = function( id ) { return document.getElementById( id ).value; };
$("foo") = whatever // Left side of assignment is not a reference
我想我知道发生了什么,但由于难以用语言表达,我宁愿假设我错了

那么这里发生了什么

顺便说一下,请随时发表评论:

  • 这是一个参考错误,就像我假设的那样
  • 有没有办法突出显示我的代码,以便更好地指出每行代码之间的差异
  • 我如何编写代码来显示错误,就像这张图片,而不是我的注释文本(尤其是如何使它变小)

元素的
.value
实际上是一个setter/getter

document.getElementById( id ).value
作为表达式计算(如在
$
中,您试图返回它),而不是分配给,则调用getter,并将其计算为原语。因此,对于解释器:

return document.getElementById( id ).value;
变成

return 'someValue';
因此,当调用
$
时,将返回一些字符串,但与

'someValue' = 'newValue'
不起作用,也不起作用

$("foo") = 'newValue';
对于您试图执行的操作,您必须通过分配给
.value
属性来调用setter。一旦将
.value
计算为表达式(例如在
返回
的右侧),您就已经调用了getter

调用setter的一种可能方法是:

const set$ = (id, newVal) => {
  document.getElementById(id).value = newVal;
};
set$('foo', 'myNewVal');

元素的
.value
实际上是一个setter/getter

document.getElementById( id ).value
作为表达式计算(如在
$
中,您试图返回它),而不是分配给,则调用getter,并将其计算为原语。因此,对于解释器:

return document.getElementById( id ).value;
变成

return 'someValue';
因此,当调用
$
时,将返回一些字符串,但与

'someValue' = 'newValue'
不起作用,也不起作用

$("foo") = 'newValue';
对于您试图执行的操作,您必须通过分配给
.value
属性来调用setter。一旦将
.value
计算为表达式(例如在
返回
的右侧),您就已经调用了getter

调用setter的一种可能方法是:

const set$ = (id, newVal) => {
  document.getElementById(id).value = newVal;
};
set$('foo', 'myNewVal');

在第二个函数中,
$(“foo”)
的返回值是一个字符串。不能为字符串赋值:

var$=function(id){return document.getElementById(id).value;};
console.log(typeof$(“foo”),$(“foo”))

在第二个函数中,
$(“foo”)
的返回值是一个字符串。您不能分配给字符串:

var$=function(id){return document.getElementById(id).value;};
console.log(typeof$(“foo”),$(“foo”))

$(“foo”).value=whatever
whatever
分配给返回的节点对象的
value
属性。
$(“foo”)=whatever
尝试将值分配给值(类似于将字符串分配给另一个字符串)你说得对,这是一个引用错误。
document.getElementById('foo')。value
实际上是(一个计算为)引用的表达式。你的问题是函数调用
$('foo”)
不是,因为函数不能返回引用。
$('foo').value=which
which
赋值给返回的节点对象的
value
属性。
$(“foo”)=which
尝试将值赋值给值(类似于将字符串赋值给另一个字符串),您认为这是一个引用错误。
document.getElementById('foo')).value
实际上是(一个计算结果为)引用的表达式。您的问题是函数调用
$(“foo”)
不是,因为函数不能返回引用。感谢您的解释!本质上,虽然我们不能引用
。value
但我们可以查找
getElementByID()
各自的
.setValue()
并使用它就可以了吗?您要么必须将
赋值给
.value
,将
.value
放在左手边,要么调用/执行相应的操作。感谢您的解释!基本上,虽然我们不能引用
.value
但我们可以查找
getElementByID()
各自的
.setValue()
并且可以很好地使用它吗?您必须将
.value
分配给
.value
,并将
.value
放在左手边,或者调用/执行相应的操作。