生活随笔
收集整理的這篇文章主要介紹了
《JavaScript》高级程序设计---第3章
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3.基本概念
松散類型:所謂松散類型就是可以用來保存任何類型的數據。給未經聲明的變量賦值在嚴格模式下會導致拋出ReferenceError錯誤。Object本質上由一組無序的名值對組成。未經初始化的默認值就會取得undefined值。True和False都不是Boolean值,只是標識符。如果小數點后面沒有跟任何數字,那么這個數值就可以作為整數值來保存,因為浮點數值需要的內存空間是保存整數值的兩倍。NaN與任何值都不相等,包括NaN本身。把非數值轉化為數值的3個函數:Number()、paeseInt()和parseFloat()。ECMAScript中的對象其實就是一組數據和功能的集合。Object類型所具有的任何屬性和方法也同樣存在于更具體的對象中。Object的每個實例都具有下列屬性和方法:
constructor保存著用于創建當前對象的函數。
| hasOwnProperty | 用于檢查給定的屬性在當前對象實例中是否存在 |
| isPrototypeof(object) | 用于檢查傳入的對象是否是當前對象的原型 |
| propertyIsEnumerable(propertyName) | 用于檢查給定的屬性是否能夠使用for-in語句來枚舉 |
| toLocaleString() | 返回對象的字符串表示,該字符串與執行環境的地區相對應 |
| toString() | 返回對象的字符串表示 |
| valueOf() | 返回對象的字符串、數值或布爾值表示 |
從技術角度講,ECMA-262中對象的行為不一定適用于JavaScript中的其他對象。瀏覽器環境中的對象,比如BOM和DOM中的對象,都屬于宿主的對象,因為它們是由宿主實現提供和定義的。ECMA-262不負責定義宿主對象,因此宿主對象可能會也可能不會繼承object。一元操作符:只能操作一個值的操作符叫一元操作符。位操作符:位操作符用于在最基本的層次上,即按內存中表示數值的位來操作數值。ECMAScript中的所有數值都以IEEE-765 64位格式存儲,但位操作符并不直接操作64位的值。而是先將64位的值轉換成32位的整數,然后執行操作,最好再將結果轉換回64位。對于開發人員來說,由于64位存儲格式是透明的,因此整個過程就像是只存在32位的整數一樣。求-18的二進制碼的過程:
(1)求18的二進制碼即:
0000 0000 0000 0000 0000 0000 0001 0010
(2) 對該二進制碼進行按位取反
1111 1111 1111 1111 1111 1111 1110 1101
(3)二進制反碼加1
1111 1111 1111 1111 1111 1111 1110 1110ECMAScript會盡力向我們隱藏所有的信息,即:在以二進制字符串形式輸出一個負數時,我們看到的只是這個負數絕對值的二進制碼前面加上了一個負號。按位非(NOT):按位非操作符由一個波浪線(~)表示,執行按位非得結果就是返回數值得反碼。按位非是ECMAScript操作符中少數幾個與二進制計算有關得操作符之一。按位與(&)只在兩個數值的對應位都是1時才返回1,任何一位是0,結果都是0。按位或(|)只有在兩個數值的對應位都是0時才返回0,任何1位是1,結果都是1。按位異或(^)只有在兩個數值的對應位都不相同時才返回1,否則返回0。左移(<<),這個操作符會將數值的所有位向左移動指定的位數。有符號的右移(>>),這個操作符會將數值向右移動,但保留符號位。無符號的右移(>>>),這個操作符會將數值的所有32位都向右移動。不能在邏輯與操作中使用未定義的值。我們可以利用邏輯或的這一行來避免位變量賦null或undefined值。如果參與乘性計算的某個操作數不是數值,后臺會先使用Number()轉型函數將其轉換為數值。也就是說,空字符串將被當作0,布爾值true將被當作1。var result2=5+“5” ; //“55”var result3=NaN-1; //NaNECMAScript對象的屬性都沒有順序。因此,通過for-in循環輸出的屬性名的順序時不可測的。具體來講,所有屬性都會被返回一次,但返回的先后次序可能會因瀏覽器而異。ECMAScript的switch語句中可使用任何數據類型,無論是字符串,還是對象都沒有問題。其次,每個case的值不一定是常量,可以是變量,甚至是表達式。ECMAScript中,switch語句在比較值時使用的時全等操作符,因此不會發生類型轉換(例如,字符串"10"不等于數值10)。ECMAScript函數的參數與大多數其他語言中函數的參數有所不同。ECMAScript函數不介意傳遞進來多少個參數,也不在乎傳進來參數是什么數據類型。也就是說,即便你定義的函數只接受兩個參數。可以傳遞一個、三個甚至不傳遞參數,而解析器永遠不會有什么怨言。之所以會這樣,原因是ECMAScript中的參數在內部是用一個數組來表示的。函數接收到的始終是這個數組,而不關心數組中包含哪些參數。實際上,在函數體內可以通過arguments對象來訪問這個參數數組,從而獲取傳遞給函數的每一個參數。ECMAScript函數的一個重要特點:命名的參數只提供便利,但不是必需的。arguments的值永遠與對應命名參數的值保持同步。例如:傳進來的第二個參數num2=10,現在利用arguments[1]=9后,num2=9。不過,這并不是說讀取這兩個值會訪問相同的內存空間,它們的內存空間是獨立的,但它們的值會同步。沒有傳遞值得命名參數將自動被賦予undefined值,和定義了變量但沒有初始化一樣。ECMAScript函數不能像傳統意義上那樣實現重載。如果定義了兩個名字相同得函數,則該名字只屬于后定義得函數。JavaScript得核心語言特性在ECMA-262中是以名為ECMAScript的偽語言的形式來定義的。ECMAScript中包含了所有基本的語法、操作符、數據類型以及完成基本的計算任務所必需的對象,但沒有對取得輸入和產生輸出的機制作出規定。
總結
以上是生活随笔為你收集整理的《JavaScript》高级程序设计---第3章的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。