淺談JS基礎與內置對象

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

咱們先來了解一下js的一些基礎,函數

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

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

因此typeof能夠檢測的值只有對象

undefined、string、number、boolean、function、objectblog

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,不一樣爲falsestring

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

咱們都知道js是弱類型語言,因此js會自動進行類型轉換,==只檢查值是否相等,===不只檢查值還要檢查類型是否相等console

在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

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

相關文章
相關標籤/搜索