js零碎筆記

一、在包含加法運算符的數字和字符串表達式中,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成了一個不可寫,不可配置的數據屬性,它的值永遠是undefinspa

 

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:

  • false
  • undefined
  • null
  • 0
  • NaN
  • 空字符串 ("")

全部其餘值,包括全部對象會被計算爲 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);

 待續。。。。

相關文章
相關標籤/搜索