JavaScript 基本類型裝換規則

/*************************************************************************************************************
* @第二章 在HTML 中使用Javascript
*/
<script> 標籤屬性
async 可選:表示當即下載腳本,但不妨礙頁面中的其餘操做,只對外部文件有效。
defer 可選:表示腳本能夠延遲都文檔徹底被解析和顯示以後再執行,只對外部文件有效。
src 可選:表示包含要執行的外邊文件。
type 可選:表示編寫代碼使用的腳本語言的內容類型。

不推薦使用的語法,會致使xhtml忽略該腳本。
<script>
<!--

-->
</script>

文檔模式,若是沒有文檔聲明會致使混雜模式。在某些特殊狀況下會影響到js的解釋執行。
<!doctype html>html

/******************************************************************************************************************
* @第三章 基本概念
*/chrome

ECMAScript 中的全部標識符(變量名,函數名,操做符)都區分大小寫。async

標識符的第一個字符必須是字母、下劃線、$符中的一個。函數

嚴格模式。
"use strict";指針

@變量
ECMAScript 中的變量都是鬆散類型的,能夠保存任何類型的數據(基本類型和引用類型,變量名只是用來保存數據的佔位符,變量名被聲明以後能夠隨意改變類型)。
var num = 4;
num = "num";
num = null;htm

@數據類型
ECMAScript 分2中數據類型,分別是引用類型和基本類型。對象

@基本類型
基本類型包含 undefined, null, Boolean, Number, String;ip

@typeof 操做符
typeof 操做符用來檢測基本類型數據,返回一個字符串,對null進行操做是 safari5 chrome7 以前的版本會返回 "object"
"undefined" ---若是這個值未定義;
"boolean" ---若是這個值是布爾值;
"string" ---若是這個值是字符串;
"number" ---若是這個值是數值;
"object" ---若是這個值是對象或者null;
"function" ---若是這個值是函數;內存

@undefined 類型
undefined 表示聲明變量可是未初始化,不過undefined 值的變量和還沒有定義的變量是不同的。
var message;
alert(message); //"undefined"
alert(num); //報錯文檔

@null 類型
null 表示一個空對象的指針,這也是使用typeof 操做符會返回 "object"的緣由。
若是定義的變量準備在未來保存對象,那麼最好使用null初始化,而不是其餘值。

@number 類型
number 類型表示數字類型,ECMAScript 使用IEEE754格式來表示整數和浮點數。
1.浮點數,所謂浮點數就是該數值中必須包含一個小數點,而且小數點後面必須至少有一位數字。浮點數須要的內存空間是整數類型的2倍。
因此ECMAScript 會不失時機的將浮點數轉爲整數。 以下所示:
var floo = 10.00 //整數---解析爲10

2.數值範圍 ECMAScript 中表示最小值保存在 Number.MIN_VALUE, 最大值保存在 Number.MAX_VALUE中。
超過這2個值就是 Infinity(正無窮) -Infinity(負無窮), 對因而否是有效數字使用isFinite()函數,若是值在最大值和最小值之間返回true;

3.NaN 非數值是一個特殊的數值。這個數值表示原本要返回數值的操做數未返回數值的狀況。 ECMAScript 中 任何數值 / 0都返回 NaN;
NaN有2個特色: 1.NaN 和任何數操做都會返回NaN ,2. NaN 和任何值都不相等,包括本身自己 (NaN != NaN)
ECMAScript 中定義了一個函數 isNaN(NaN), 該函數會將參數轉換爲數值 ,若是非數字返回true , 是數值返回false;

4. 數值轉換
有3個函數能夠把非數值轉換爲數值: Number(), parseInt(),parseFloat();

Number()轉換規則以下:
true 和 false 轉爲 1 和 0;
若是是數字值,只是簡單的傳入傳出,返回原值。
若是是null 值,返回0。
若是是undefined, 返回NaN。
若是是字符串按下列規則。
若是字符串只包含數值,將其轉換爲十進制,返回該數值。"+123"返回123,"-12"返回-12, "0122"返回122 前導零被忽略了。
若是字符串包含有效的浮點格式,"012.1" 返回12.1 前導零被忽略。
若是字符串包含有效的十六進制格式。則將其轉爲相同大小的十進制數值。如"0xa" 返回10。
若是字符串是空的,則返回0。
若是字符串包含處上述之外的字符,返回NaN 如 "aew12" 返回NaN。

若是是對象,則調用對象的valueOf()方法,而後按上述規則返回值。當沒有valueOf() 方法的時候會調用toString()方法,再次按上述規則返回值。

parseInt()
parseInt() 轉換字符串時,更多的是看其是否符合數值模式。他會忽略字符串前面的空格,直至找到第一個非空格字符。若是不是數字字符或者符號。
parseInt() 會返回NaN, 也就是說parseInt()轉換空字符串會返回NaN。若是第一個字符包含數字,會解析到全部後續字符或遇到非數字字符爲止。
"12ad1" 返回12。
parseInt(12,10) 第二個參數是以何種格式進行解析。如二進制,八進制,十進制,十六進制。

parseFloat()
也是從第一個非空格字符開始解析,會忽略前導零,遇到第一個非數字類型無效,第二個小數點包括後面的無效。parseFloat()只解析十進制。

@string 類型
ECMAScript 中的字符串是不可變的,也就是說,字符串一旦建立,他們的值就不能該改變。要改變某個變量保存的字符串,首先要銷燬原來的字符串,而後會用新的字符串填充該變量。

轉換爲字符串
要把一個值轉換爲字符串有兩種方式一種就是使用幾乎每一個值都有的toString()方法。該方法返回相對應的字符串表現。如 true 返回 "true"
該函數能夠傳遞參數控制以何種進制輸出。默認按十進制。如 var a = 12; a.toString(16) 返回c;
*注意這裏只對數值類型其做用,非數字如"12"會按原值輸出。

要知道在ECMAScript 中 null 和 undefined 是沒有方法的,因此使用 String()構造器方法轉換。 若是是null 返回"null"。

@一元加減操做符
使用一元加減運算符會像Number()函數同樣對這個值進行轉換。
var s1 = +1, s2 = +'1.1', s3 = +'z';
s1 返回 1, s2 返回 1.1 , s3 返回 NaN;

@布爾操做符
1.邏輯非
邏輯非操做符由一個(!)表示,能夠應用於ECMAScript 中的任何值。不管這個值是什麼類型都會返回一個布爾值。而後在對其取反。規則以下。
若是操做數是一個對象,返回true而後對其取反,返回false;下面規則同樣,因此簡寫最終返回結果。
若是操做數是一個空字符串,返回true;
若是操做數是一個非空字符串,返回false;
若是操做數是數值0,返回true;
若是操做數是任意非0的數值(包含Infinity)返回false;
若是操做數是null,返回true;
若是操做數是NaN,返回true;
若是操做數是undefined ,返回true;

2.邏輯與
邏輯與操做符由兩個(&&)符號表示,有2個操做數。能夠操做任何值,當操做在不是布爾類型,邏輯與不必定返回布爾值,按以下規則。
若是第一個操做數是對象,則返回第二個操做數。
若是兩個操做數都是對象,則返回第二個操做數,即第二個對象。
若是第二個操做數是對象,則在第一個操做數的求值爲true 的狀況下返回該對象,不然返回第一個操做數(不必定是false 例如 null && {} 返回 null)。
若是有一個操做數是null,則返回null。
若是有一個操做數是undefined ,則返回undefined。
若是有一個操做數是 NaN ,則返回 NaN。
*注意若是操做數都是 undefined null NaN 則第一個操做數是哪一個則返回哪一個 例如 NaN && null 返回NaN;
*注意邏輯與是短路操做,即第一個操做數能求出就過那麼不會對第二個操做數求值。例如:
alert(false && abc ) 這裏打印了 false
alert(true && ABC ) 這裏報錯了,由於變量ABC未定義。


3.邏輯或
邏輯或操做符由兩個(||)表示,有兩個操做數。與邏輯與類似,若是有一個操做數不是布爾值,邏輯或也不必定返回布爾值,規則以下。
若是第一個操做數是false,則返回第二個操做數。
若是第一個操做數是對象,則返回第一個操做數。
若是兩個操做數都是對象,則返回第一個操做數。

若是兩個操做數都是 null undefined NaN 對象 其中的一個返回第一個操做數。
*邏輯與也是短路操做,及第一個操做數返回true 那麼就不會對第二個操做數求值了。


@乘性運算符
ECMAScript 定義了3個乘性運算符:乘法、除法和求模。在執行非數值運算的狀況下會進行類型轉換。若是參與乘性計算的某個操做數不是數值,後臺會使用Number()函數對其進行轉換數值操做。

1.乘法
乘法操做符用一個(*)表示,用於計算兩個數值的乘積。以下所示:
var num = 10 * 21;

在處理特殊值的狀況下,乘法運算符會遵循下列規則:
若是操做數都是數值,執行常規計算,兩個數都是正數或者負數返回正數,有一個負數返回負數,若是乘積超過了ECMAScript數值的範圍則返回 Infinity (正無窮)或 -Infinity;
若是一個數是NaN,則結果是NaN;
若是Infinity 與 0 相乘,則結果是NaN;
任何數值與0相乘,則結果是0;任何非數值與0相乘,則結果是 NaN;
若是Infinity 與非0數值相乘,則結果是Infinity 或 -Infinity ,若是與非數值類型相乘結果是NaN;
若是是 Infinity 與 Infinity 相乘,則結果是 Infinity;
若是一個操做數是對象先調用valueOf()方法,若是沒有則調用toString()方法。在後臺調用Number()將其轉爲數值。
若是操做數有一個不是數值,則在後臺調用Number()將其轉爲數值,而後再應用上述規則。

2.除法
除法操做符用一個(/)表示,執行兩個數的計算,以下所示:
var num = 99 / 9 ;
在處理特殊值的狀況下,除法運算符與乘法運算符規則相似。

3.求模
求模操做符用一個(%)表示,執行兩個數的計算,以下所示:
var num = 99 % 9 ;
在處理特殊值的狀況下,求模運算符與乘法運算符規則相似。

@關係操做符 比較運算符。 小於、大於、小於等於、大於等於這幾個關係操做符用於對兩個值進行比較。這幾個操做符都會返回布爾值。 與ECMAScript 中的其餘操做符同樣,當關系操做符的操做數使用了非數值時,也要進行數據轉換或完成某些奇怪的操做。規則以下: 若是兩個操做數都是數值,則進行數值比較。 若是兩個操做數都是字符串,則比較兩個字符串對應的ascll碼。 若是一個操做數是數值,則將另外一個操做數轉爲數值,而後進行比較。若是一個值是 NaN 則返回 false; 若是操做數是對象,則調用該對象的valueOf()方法, 沒有則調用 toString() 方法,而後在對其進行相應的操做。 若是一個操做數是布爾值,則將其轉換爲數值,再進行比較。 @相等運算符。 1.相等與不相等 ECMAScript 中的相等操做符由(==)表示,若是兩個操做數相等則返回true。而不相等操做符由(!=)表示,若是兩個操做數不相等,則返回true。 這兩個操做符都會先轉換操做數(強制轉換),而後再比較他們的相等性。規則以下: 若是有一個操做數是布爾值,則在比較相等性以前先將其轉換爲數值--false 轉爲0,而 true 轉換爲 1; 例如 alert(true >= false); 若是一個操做數是字符串,另外一個操做數是數值,在比較相等性以前先將字符串轉爲數值; 若是一個操做數是對象,另外一個不是,則先調用對象的valueOf()方法,沒有則調用 toString(),而後將獲得的值按前面的規則進行比較。 null 和 undefined 是相等的 要比較相等性以前,不能將null 和 undefined 轉換爲其餘任何值。 若是有一個操做數是 NaN ,則相等操做符返回 false ,而不相等運算符返回 true ; *注意若是兩個操做數都是 NaN 則相等運算符返回 false , NaN 不等於 NaN; 若是兩個操做數都是對象,則比較他們是否是同一個對象, 若是兩個操做數都指向了同一個對象。則相等運算符返回 true ,不然返回 false; 2.全等於全不等 除了在比較以前不作操做數轉換以外,全等與全不等操做符和等於不等操做符沒什麼區別。全等運算符先判斷類型,若是類型不一致返回false,若是類型一致再對值進行比較。

相關文章
相關標籤/搜索