一、基本類型和引用類型的值前端
* 基本類型 : 指的是簡單的數據段,五種基本類型是按值訪問的,能夠直接操做保存在變量中實際的值。 * 引用類型 : 指那些可能由多個值組成的對象,引用類型的值是保存在內存中的對象,js不容許直接訪問內存中的位置,也就是不可直接操做對象的內存空間。
操做對象實際是操做對象的引用而不是實際的對象,引用類型的值按引用訪問。
二、動態的屬性
引用類型的值能夠添加屬性和方法,也能夠刪除和修改,但基本類型不行。
//引用類型函數
var person = new Object(); person.name = "sheyurong"; alert(person.name); //sheyurong
基本類型添加屬性也不會報錯。
//基本類型ui
var name = "sheyurong" name.age = 27; alert(name.age) ; //undefined
三、賦值變量值url
//基本類型code
var num1 = 5; var num2 = num1; // num1 與 num2 中的5徹底獨立,參與任何操做也不會相互影響
//引用類型對象
var obj1 = new Object(); var obj2 = obj1; obj1.name = "syr"; alert(obj.name); //"syr"; 改變其中任一變量也會影響另外一個,由於兩個變量引用同一變量。
四、傳遞參數
es中全部函數的參數都是按值傳遞的,基本類型與引用類型的傳參與變量的複製同樣。內存
function setName(obj){ obj.name = "syr"; obj = new Object(); obj.name = "abc" } var person = new Object(); setName(person); alert(person); // "syr" //能夠把函數的傳參想象成局部變量同樣
五、檢測類型
typeof能夠檢測基本類型,但檢測對象時並不能知道是什麼類型的對象,所以,使用instanceof操做符。
語法 : 作用域
result = variable instanceof constructor
//若是變量爲引用類型的實例,則instanceof返回true
例 : person instanceof Object; // person是Object的實例嗎?
根據規定,全部引用類型都是object的實例,instanceof檢測基本類型,適中返回false,由於基本類型不是對象。it
六、執行環境及做用域io
* 執行環境決定了變量或函數有權訪問的其餘數據,決定了她們各自的行爲。 * 每一個執行環境都有一個環境變量對象,全部變量和函數都保存在這裏面,沒法訪問,可是後臺會使用它。 * 全局變量是最外圍的一個執行環境,代碼在環境中執行,會建立一個做用域鏈,用途是保證對執行環境有權訪問全部變量和函數的有序訪問。 * 做用域鏈 : 如環境是函數,則最開始只包含有一個變量-arguments對象 -> 外部環境1 -> 外部環境2 ... -> 全局。
做用域鏈中最後一個對象始終是全局執行環境。
* 內部環境能夠經過做用域鏈訪問全部的外部環境,外部則不能訪問內部。函數參數的訪問規則與執行環境其餘變量相同。
七、延長做用域鏈
* 使用try-catch語句的catch塊; * with語句 :
都是會在做用域鏈的前端添加一個變量對象,with可將制定對象添加到做用域鏈中。
catch建立新變量,內涵跑出的錯誤對象聲明。
例 : function build(){ var qs = 'aaa'; with(location){ var url = href + qs; } return url ; } //with吧location對象引入,此種就包含了location中全部屬性和方法。