一、在包含加法運算符的數字和字符串表達式中,JavaScript 會把數字值轉換爲字符串。在包含其它運算符(譯註:以下面的「-」)時,JavaScript語言不會把數字變爲字符。瀏覽器
console.log("this is a test" + 1); //this is a test1
console.log("37"-7); //30
二、在JavaScript語言中,一個標識符必須以字母、下劃線(_)或者美圓($)符號開頭;後續的字符能夠包含數字(0-9)。由於JavaScript語言是區分大小寫的,這裏所指的字母能夠是(大寫的)「A」到字母「Z」和(小寫的)「a」到「z」。閉包
三、用var聲明時未賦初值的變量,值會被設定爲undefined。函數
在JavaScript中,undefined這個詞有多重含義.首字母大寫的Undefined表示的是一種數據類型,小寫的undefined表示的是屬於這種數據類型的惟一的一個值.但這兩種undefined都只能存在於文檔或規範中,不能 存在於JavaScript代碼中.在JavaScript代碼中,你看到的undefined最有多是全局對象的一個屬性
,該屬性的初始值是就是前面所說的原始值undefined
,還有種狀況就是,這個undefined
是個局部變量,就像其餘普通變量同樣,沒有任何特殊性,它的值不必定是undefined
,但一般狀況下都是的.下面咱們所說的undefined
,都指的是window.undefined
這個屬性.this
在ES3中(Firefox4以前),window.undefined
就是一個普通的屬性,你徹底能夠把它的值改變成爲任意的真值,但在ES5中((Firefox4以後),window.undefined
成了一個不可寫,不可配置的數據屬性,它的值永遠是undefin
spa
var num ; console.log(num); //undefined
四、undefined
值在布爾類型環境中會被看成false。undefined派生自null。
.net
var num = undefined; console.log(Boolean(num)); //false
五、數值類型環境中
undefined
值會被轉換爲NaN
(譯註:NaN爲「Not a Number」,不是一個數字,的縮寫)。指針
var num = NaN; var num1 = 5; console.log(num+num1); //NaN
六、值 null
是一個 JavaScript 字面量,表示空值(null or an "empty" value),即沒有對象被呈現(no object value is present)。空值null在數值類型環境中會被看成0來對待,而布爾類型環境中會被看成false。code
var num1 = null; var num2 = 5; console.log(num1+num2); //5 console.log(Boolean(num1)); //false
七、全局變量其實是全局對象的屬性(在瀏覽器下就是window對象的一個屬性)。對象
var name = "定海神針"; console.log(window.name); //定海神針
八、在換行以前加上反斜線以轉義換行(譯註:實際上就是一條語句拆成多行書寫),這樣反斜線和換行都不會出如今字符串的值中。blog
var hello = "hello \ world \ !"; console.log(hello); //hello world !
九、位運算符
位運算符將它的操做數視爲32位的二進制串(0和1組成)。例如:十進制數字9用二進制表示爲1001,位運算符就是在這個二進制表示上執行運算,可是返回結果是標準的JavaScript數值。
十、in
操做,若是指定的屬性在指定的對象中會返回true
語法:屬性 in 對象
var myarray = new Array("1","2","3","4"); console.dir(myarray);
這是結果:一共有5個屬性:
console.log("0" in myarray); //true console.log("5" in myarray); //false 屬性裏沒有5 console.log("length" in myarray); //true
十一、typeof和instanceof的目的都是檢測變量的類型,兩個的區別在於typeof通常是檢測的是基本數據類型,instanceof主要檢測的是引用類型。
十二、逗號操做符(,)對兩個操做數進行求值並返回第二個操做數的值。它的優先級別在全部運算符中是最低的,結合方向是「自左至右」的。
var a = 30,b; b = 30,20; console.log(b); //30
爲何是30而不是20,由於=優先級比,高,改成以下就符合咱們的預期:
var a = 30,b; b = (30,20); console.log(b); //20
1三、null表示"沒有對象",undefined表示"缺乏值",就是此處應該有一個值,可是尚未定義。null主要在對象操做上用,undefined主要用在變量上。(此處待確認)
1四、咱們使用一對花括號{}來分組語句塊,以下所示:
{
statement_1;
statement_2;
...
statement_n;
}
1五、在ECMAScript 6標準以前,Javascript沒有塊做用域。若是你在塊的外部聲明瞭一個變量,而後在塊中聲明瞭一個相同變量名的變量,並賦予不一樣的值。那麼在程序執行中將會使用塊中的值。示例:
var a = 1; { var a =2; } console.log(a); //2
這段代碼的輸出是2,這是由於var x=2的做用範圍與var x=1的做用範圍相同。
1六、在if的條件語句中,傳遞給條件語句時,如下被認爲是false:
全部其餘值,包括全部對象會被計算爲 true 。注意:Boolean對象被認爲是true,而字面量false則是false.
var x = new Boolean(false); if (x) { console.log("true"); //true } if (!false) { console.log("false"); //false }
1七、你能夠在一個函數裏面嵌套另一個函數。
嵌套(內部)函數是容器(外部)函數的私有成員。它自身也造成了一個閉包。一個閉包是一個能夠本身擁有獨立的環境與變量的的表達式(一般是函數)。既然嵌套函數是一個閉包,就意味着一個嵌套函數能夠繼承容器函數的參數和變量。
換句話說,內部函數包含外部函數的做用域。能夠總結以下:
關於閉包的一個資料:http://blog.csdn.net/yfgcq/article/details/2039477
英文好能夠看:http://jibbering.com/faq/notes/closures/
1八、對象名首字母大寫是很是廣泛並且很恰當的慣用法。
1九、一段代碼,運行結果是什麼?
var a = {n: 1}; a.x = a = {n: 2}; console.log(a.x);
運行結果是undefined,我是這麼理解這個過程的:
var a = {n:1}; var b =a; console.log( a === b); // true a和b是一個引用 // a.x = a = {n:2}; a = {n:2}; console.log ( a === b ); // false 這個a已經不是上一個a了,是一個新的地址,而b纔是上一個a,a和b的指針不一樣了 a.x ; // 只是定義了一個屬性,並無賦值操做,由於a = {n:2}也是一個定義過程,固然a.x就是undefined // a.x = a = {n:2};至關於var a.x,a={n:2} console.log(a.x);
待續。。。。