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元素(它是一个元素)。所以,它似乎是一个对象。好吧,我想它有它。如果传递的值不是对象,那么函数中的内容将不起作用。奇怪的是,传入的内容在传入之前根本没有定义。这只是一个词。有点像量子物理,哈哈。