Javascript高级程序设计——基本类型和引用类型的值
ECMAScript中的變量有兩種不同的數據類型的值:
基本類型:基本類型的值是簡單的數據段。包括:Undefined、Null、Number、Boolean、String五種
引用類型:引用類型的值是保存在內存中的對象,引用類型對象保存的是指針。
當復制變量時,對于基本類型,會在變量對象上創建新值,然后把該值復制到新變量分配的位置上。
對于引用類型,同樣也會把儲存在變量中的值復制一遍,只不過這個變量儲存的是指針。指針指向儲存在堆中的對象:
傳遞參數:
ECMAScript中所有函數的參數都是按照值傳遞的,即把函數的外部的值復制給一個局部變量arguments對象中的一個元素。傳遞引用時會把引用的內存地址復制給這個局部變量,所以局部變量的變化會反映在函數外部。
function setName(obj){obj.name = "yangxunwu"; }var person = new Object(); setName(person); alert(person.name) //"yangxunwu" 這個示例中的引用類型傳遞給函數參數時,其對象的地址被復制給函數參數,所以setNme()內部對對象添加屬性時,也會反映到外部person對象中。function setName(obj){obj.name = "yangxunwu";obj = new Object();obj.name = "new name"; } var person = new Object(); setName(person); alert(person.name); //"yangxunwu" 對象傳遞給函數時只是把地址復制給內部變量arguments,所以第一個obj.name= "yangxunwu",修改了外部的對象的屬性,當obj = new Object()時,局部變量 被重新賦值,這個值是局部對象的值,所以即使添加了屬性,這個局部對象也會在 函數執行完自動銷毀。如果是引用傳遞,那么這里的外部person對象的name屬性 會被修改為”new name“,但javascript的函數參數是值傳遞,所以這里依舊輸 出”yangxunwu“.
檢測類型
對于基本數據類型用typeof操作符,typeof對于引用類型一律返回object
基本數據類型:typeof 4 //Number typeof "4" //String typeof null //Object
對于引用用類型,使用instanceof操作符類判斷是什么類型的對象,所以引用類型都是Object實例,所以始終反悔true,基本數據類型不是對象,所以始終為false。
person instanceof Object; //true 5 instanceof Object //false?
執行環境和作用域
1、執行環境定義了變量或函數有權訪問的其他數據,每個執行環境都有與之相關聯的變量對象,環境中定義的所以變量和函數都保存在這個對象中。
2、全局執行環境是最外圍的一個執行環境,Web瀏覽器中全局執行環境是window對象,執行環境中的代碼全部執行完后,環境被銷毀,所以函數和變量也被銷毀。
3、代碼執行時會創建一個作用域鏈,用途是保證對執行環境有權訪問的所有變量和函數的有序訪問,作用域前端是當前執行代碼的環境的變量對象,下一個變量對象來自包含的外部環境,直到全局環境。
4、標示符查詢是沿著作用域鏈一級一級的搜索,搜索到之后就停止搜索,所以標示符相同的局部中的變量會屏蔽外部變量。
延長作用域鏈with和try-catch:
對于with語句來說,會將指定的對象添加到作用域鏈中,對于catch,會創建新的變量對象,包含錯誤對象的聲明。
function buildUrl(){var loc = "http://";with(location){var url = href + loc;}return url; }with將location對象所有屬性和方法添加到了變量對象,然后變量對象被添加到作用域的前端,
with的內部定義了url變量,url也就成為了函數執行環境的一部分,所以可以作為函數被返回。
js沒有塊級作用域
for(var i = 0; i < 10; i++){.... }alert(i) //10
轉載于:https://www.cnblogs.com/yangxunwu1992/p/4772700.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Javascript高级程序设计——基本类型和引用类型的值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: samba服务器配置
- 下一篇: 如何用图表控件实现点击图例图标隐藏图表序