1. 變量類型
js變量類型分爲基本類型(或者叫值類型)和引用類型。(按照存儲方式區分)
• 值類型
值類型:Number、String、Boolean、Null、Undefiend;這5種基本數據類型是按值訪問的,能夠操做保存在變量中的實際的值。
對於值類型,在複製變量的時候,會在新的變量上建立一個新值,這個新值和原值是相互獨立的,好比下面的例子:javascript
var a=100; var b=100; a=200; console.log(b); //100
• 引用類型
引用類型值是保存在變量中的對象;引用類型值就是指對象。
保存引用類型值的變量,實際上保存的是一個指向該對象的指針。
當複製保存着對象的某個變量時,複製的實際上是指針;複製操做結束後,兩個變量指向同一個對象。
對於引用類型值,能夠爲其添加屬性和方法,也能夠修改或者刪除其屬性和方法。
在爲對象添加屬性和方法時,操做的是實際的對象,所以,改變任何一個變量,都會影響另一個變量。好比下面的例子:java
var a={age:100}; var b=a; b.age=20; console.log(a.age); //20
注意: 基本類型值之間的比較,只是單純的值的比較。
引用類型值的比較並不是值的比較:即便兩個對象包含相同的屬性和值,它們也是不相等的;各個索引元素徹底相等的兩個數組也不相等。
引用類型值的比較是引用的比較,當且僅當它們引用同一個對象時,它們才相等。
• typeof 運算符詳解
由下面的例子,咱們能夠看出typeof只能判斷值類型的變量,不能判斷引用類型的變量,因此不能準確的判斷變量類型。數組
typeof(undefined); // undefined typeof('abc'); // string typeof(123); // number typeof(true); // boolean typeof({}); // object typeof([]); // object typeof(null); // object typeof(console.log); // function
2. 變量計算
• 強制類型轉換
如下四種狀況會發生強制類型的轉換:瀏覽器
var a=100+10; // 100 var b=100+"10"; // '10010'
console.log((100=="100")); // true console.log((0=="")); //true console.log((null==undefined)); // true
在使用==得時候會強制類型轉換,而使用===的時候不會發生強制類型轉換。
==計算要慎用,會出現上述問題,若是使用===,則不會出現上述問題。
判斷對象的一個屬性存在可使用以下語法:函數
var obj = {} if(obj.name == null){...} // 至關於obj.name === null || obj.name === undefined /* 該方法只適用於判斷對象的屬性,不能用於直接判斷變量是否存在 */ if(someVal){...} // 這裏瀏覽器會報錯
以下例子,if()判斷中會對()裏的值進行強制轉換爲布爾類型。if()條件判斷中0、""、NaN、null、undefined、false都會轉爲false。指針
var b=100; if(b){ // ... }
console.log((10 && 0)); // 0 console.log(("" || "abc")); //"abc" console.log((!window.abc)); // true // 判斷一個變量會被當作 true 仍是 false var a=100; console.log(!!a); // true
3.JS內置函數和對象
js中內置了一些函數和對象,直接能夠調用開發。
根據ECMAscript提供的內置函數包括Object、Array、Boolean、Number、String、Function、Date、Regexp和Error。內置對象包括Math和JSON。code
注意:javascript基礎語法提供的內置函數和方法只有這些,像Window、Navigator那是瀏覽器提供給咱們的。還有一點前面的集中都是內置函數而不是內置對象,最後的Math和JSON是內置對象