第一篇js文章,今天我將從基礎部分,以及三座大山開始淺談一下本身對js的理解,有不對的地方,請大神們告知修改瀏覽器
咱們先來了解一下js的一些基礎,函數
首先是數據類型,JS有兩種數據類型,原始類型和引用類型,咱們用typeof運算符來判斷一個數據是何種類型,spa
值得一提得是,typeof只能區分值類型,除function外的引用類型將所有返回Object包括null,code
因此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
好啦,今天的分享就到這裏啦,若是有補充或者有錯誤請提示我改正,初來乍到請多指教