值
有時(shí)我很想知道javascript解析引擎是如何區(qū)分一個(gè)變量的值,比如下面這段代碼。
var x = 'javascript'; //javascriptx = "hello"; // hellox = 555; //555x = null; //nullx = a; //a is not definedx = true; //true
對(duì)于數(shù)字是直接賦值的,因?yàn)樗鼪]有多樣性,數(shù)字就是數(shù)字。但是對(duì)于值是英文的情況就很難區(qū)分了,因?yàn)樵诰幊陶Z言中,英文既可能是字符串,也可能是引用的另外一個(gè)變量。因此如何區(qū)分變量和字符串就顯得格外重要,編程語言常常將字符串用引號(hào)括起來,從而達(dá)到區(qū)分變量和字符串的作用。有些語言比如java,它們還區(qū)分單引號(hào)和雙引號(hào),單引號(hào)括起來的是一個(gè)字符,而雙引號(hào)括起來的才是字符串。但javascript并不區(qū)分字符和字符串,而是把它們都當(dāng)作字符串,因此在javascript中單引號(hào)和雙引號(hào)并沒有什么區(qū)別。
雖然通過引號(hào)可以用來區(qū)分變量和字符串,但值往往也可能是一個(gè)關(guān)鍵字,比如上面那段代碼我將x賦值為null,那么這些編程語言又是如何區(qū)分變量和關(guān)鍵字的呢?
null = 123;console.log(null); //Uncaught ReferenceError: Invalid left-hand side in assignmentundefined = 456;console.log(undefined); //undefined
以上我給null和undefined分別賦給了另外一個(gè)值,其結(jié)果,給null賦值報(bào)錯(cuò)了,給undefined賦值雖然沒有報(bào)錯(cuò),但也沒有成功。也許對(duì)于null和undefined來說,它們就是值。而變量則是尋找值。我們說javascript是如何區(qū)分變量和關(guān)鍵字,最終或許就變成了javascript是如何區(qū)分變量和值的。