Javascript 为什么一些js参数需要引号,而其他参数不需要';T
我的页面上有以下功能:Javascript 为什么一些js参数需要引号,而其他参数不需要';T,javascript,Javascript,我的页面上有以下功能: function selected(elmnt, name, id2check) { var x = document.getElementById(id2check).checked; if(x == false) { elmnt.style.backgroundColor = "#18436C"; name.style.color = "#f9FfFf";
function selected(elmnt, name, id2check) {
var x = document.getElementById(id2check).checked;
if(x == false) {
elmnt.style.backgroundColor = "#18436C";
name.style.color = "#f9FfFf";
document.getElementById(id2check).checked = true;
} else {
elmnt.style.backgroundColor = "transparent";
name.style.color = "#18436C";
document.getElementById(id2check).checked = false;
}
}
传递的第一个参数是“this”,它不需要引号。另外两个分别是div和input(复选框)的id名称。函数工作的唯一方式是第三个参数有引号,而第二个参数没有引号。为什么呢
<div id="abbsmalone_container" onclick="selected(this, abbsmalone_name, 'abbsmalone_select')">
<input type="checkbox" class="selections" name="abbsmalone_select" id="abbsmalone_select" value="yes" checked='checked' >
这是因为id2check
是字符串类型。所有字符串类型都必须与“
或”
符号一起使用,同时将值分配给String
类型的变量,它必须使用“”或“”,否则应为String
类型。还有一件事,你不需要使用这个,if(x==false)
这里x是一个布尔值,所以条件应该是if(!x)
因此你的代码看起来像
function selected(elmnt, name, id2check) {
var x = document.getElementById(id2check).checked;
if(!x) {
elmnt.style.backgroundColor = "#18436C";
name.style.color = "#f9FfFf";
document.getElementById(id2check).checked = true;
} else {
elmnt.style.backgroundColor = "transparent";
name.style.color = "#18436C";
document.getElementById(id2check).checked = false;
}
}
在这里,elmnt
是一种对象
类型,因此您不需要使用“
或”
,因此您可以使用此
。您可以将“
或”
用于字符串类型的对象
还有一件事,您使用的是name.style.color
,它表示即使name
也不是String
类型,而是一个对象。您将字符串
传递给文档.getElementById()
,即传递id
,一个html元素id,它是字符串
类型,因此这里,elmnt
是对象
类型,名称
是对象
类型,id2check
是字符串
类型。因此,对于id2check
使用“
或”
,字符串被引用,变量不是。这不是一个普通变量,它是一个javascript操作符。但是第二个和第三个参数之间有什么区别呢?它们不是两个字符串吗?我感觉这里的第二个参数不是字符串,但实际上是一个全局变量(对元素的引用),因为在中讨论了什么。您能为您在JSFIDLE.net上遇到的问题创建一个示例吗?谢谢您深思熟虑的回答。我仍然有点困惑,是什么让第二个参数成为对象。我是js新手,所以术语“对象”的意思与我不同(php)。因为我传递的是一个div的名称,所以我想它应该是一个字符串,只是第三个参数。我猜在js中,它的类型取决于它在函数中的使用方式,而不是它引用的内容。“所有字符串类型都必须与”
或”
符号一起使用。”这可能会让人困惑。变量可以有一个字符串值;在这种情况下,您不会使用引号,但它仍然会被接受为字符串。例如,您可以编写var myString='abbsmalone\u select',而不是selected(这是abbsmalone\u name,'abbsmalone\u select')
;selected(这个,abbsmalone_name,myString)
@DavidKnipe我同意你的观点,我的意思是当将变量的值赋给字符串类型时,要么它必须使用”
或”
,要么它应该是字符串类型。请理解这可能会产生误导。@ThinkOfaard,让name
成为对象的是您在这里实现它的方式。e、 例如,如果它是一个字符串
,您会说,document.getElementByID(“name”).style.color
。但是由于您使用的是name.style.color
,这证明了它是一个对象,因为属性.style
只作用于DOM元素(它是一个元素)。所以,它似乎是一个对象。好吧,我想它有它。如果传递的值不是对象,那么函数中的内容将不起作用。奇怪的是,传入的内容在传入之前根本没有定义。这只是一个词。有点像量子物理,哈哈。