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
放在左手边,或者调用/执行相应的操作。