1. 程式人生 > >淺談JS基礎與內置對象

淺談JS基礎與內置對象

null ngs 但是 了解 ray 修改 創建 ror 嚴格

第一篇js文章,今天我將從基礎部分,以及三座大山開始淺談一下自己對js的理解,有不對的地方,請大神們告知修改

我們先來了解一下js的一些基礎,

首先是數據類型,JS有兩種數據類型,原始類型引用類型,我們用typeof運算符來判斷一個數據是何種類型

值得一提得是,typeof只能區分值類型,除function外的引用類型將全部返回Object包括null

所以typeof可以檢測的值只有

undefined、string、number、boolean、function、object

typeof undefined                  //undefined
typeof "zhangsan"                 //
string typeof 100 //number typeof true //boolean typeof function a(){} //function typeof null //object typeof {} //object typeof [] //object

可以看到null,[],{}都返回了object,這不是我們想要看到的,如何區分引用類型呢,我們可以用instanceof運算符

來進行區分,

[]   instanceof Array           //true
({}) instanceof Array           //false
({}) instanceof Object          //true
null instanceof Object          //false

instanceof運算符的用法為左邊是需要確定的引用類型,右側為相應的引用類型,若相同則為true,不同為false

可以看到instanceof解決了引用類型區分的問題,但是instanceof並不屬於很嚴格的校驗方式,特殊情況我會在後面的章節中提到

我們都知道js是弱類型語言,所以js會自動進行類型轉換,==只檢查值是否相等,===不僅檢查值還要檢查類型是否相等

在js中的變量計算----強制轉換

//0、" "、false、[]用==檢驗是相同的,
0 == ""                  //0->false 與 ""->false進行比較  返回true
[] == ""          //true 
({}) == ""              //false  因為{}直接用來比較會報類型錯誤,所以需要用()運算符包裹
——————————————————————————————————————————————————————————————————————————————————
null == undefined //true null === undefined    //false

從上述代碼可以簡單的理解一下js的類型轉換,第三行代碼特別有趣,在js中若僅以==判斷時,

null與undefined會進行類型轉換導致相同,運用這一特性,我們可以在日後寫代碼中用

類似obj.name == null 來既判斷obj.name 是否為null又判斷是否為undefined。

JS中的內置對象包括: 11個

String Number Boolean —— 包裝類型

Array RegExp Math Date

Error

Function Object
Global:
是全局作用域對象: 在瀏覽器中被window代替
那麽什麽是包裝類型呢 : 即保存一個原始類型的值 並提供操作原始類型值的API
在js中原始類型的值本身不具有任何功能,比如: var a=12.652;  a.toFixed(2);

a是如何調用toFixed()函數的,因為在js中只要試圖對原始類型的值調用函數時,都會自動創建包裝類型對象

建立包裝類型的過程分為以下幾步:

  1.在試圖對原始類型的值調用任何函數時先判斷原始類型的類型名

  2.自動創建對應的包裝類型對象,保存需要被操作的原始類型值

  3.調用包裝類型對象提供的API

  4.API調用後包裝對象自動釋放

下面我們來展示一道小例題:

var str="haha";
str.len=5;
console.log(str.len)

手快的小夥伴應該已經試出來了,沒錯是undefined,那麽我們的.len去哪了

原理是這樣的 str.len=5 -> new String(str).len=5;
//執行後,new String()沒有變量接收,釋放了
console.log(str.len) -> console.log(new String(str).len);//此時的new String為新來的包裝類型,並不認識len屬性

改進:我們應該采取這種方式

var str=new String("haha");
str.len=5;
//此時new String()被str變量引用,不會被釋放!
console.log(str.money);    //5

好啦,今天的分享就到這裏啦,如果有補充或者有錯誤請提示我改正,初來乍到請多指教

淺談JS基礎與內置對象