JS高程讀書筆記--第三章基本概念

JS高程讀書筆記--第三章

語法

  1. ECMAScript中的一切(變量、函數名和操做符)都區分大小寫。express

  2. 不能把關鍵字、保留字、true、false和null用作標識符。數組

  3. 嚴格模式是爲JavaScript定義了一種不一樣的解析與執行模型。在嚴格模式下,ECMAScript3中的一些不肯定的行爲將獲得處理,並且對某些不安全的操做也會拋出錯誤。("use strict";)。安全

  4. ECMAScript中的語句以一個分號結尾;若是省略分號,則由解析器肯定語句的結尾。函數

  5. 關鍵字能夠用於表示控制語句的開始或結束,或者用於執行特定的操做等。測試

  6. 保留字某種意義上是爲了未來的關鍵字而保留的單詞。編碼

  7. ECMAScript的變量是鬆散類型的,能夠用來保存任何類型的數據,每一個變量僅僅是一個用於保存值得佔位符而已。指針

數據類型

ECMAScript中有5種簡單數據類型(基本數據類型):Undefined、Null、Boolean、Number和String,還有一種複雜數據類型:Object。code

typeof操做符

typeof是一個操做符而不是函數。對一個值使用typeof操做符可能返回下列某個字符串:對象

  • "undefined"--若是這個值未定義;ip

  • "boolean"--若是這個值是布爾值;

  • "string"--若是這個值是字符串;

  • "number"--若是這個值是數值;

  • "object"--若是這個值是對象或null;

  • "function"--若是這個值是函數;

  • 調用typeof null會返回"object",由於特殊值null被認爲是一個空的對象的引用

  • 能夠經過typeof操做符來區分函數和其餘對象

Undefined類型

Undefined類型只有一個值,即特殊的undefined。在使用var聲明變量但未對其加以初始化時,這個變量就是undefined。

注:typeof操做符返回"undefined"值時,能夠檢測變量是否被聲明,而不是是否初始化。由於對未聲明的變量執行typeof操做符也返回"undefined"

Null類型

Null類型是第二個只有一個值的數據類型,這個特殊的值是null。從邏輯角度來看,null值表示一個空對象指針。

  • 若是定義的變量準備在未來用於保存對象,那麼最好將該變量初始化爲null而不是其餘值

  • null == undefined // 返回true

Boolean類型

Boolean類型只有兩個字面值:true和false(小寫)。

JS中全部類型的值都有與這兩個Boolean值等價的值,能夠調用轉換函數Boolean ( )。

數據類型 轉換爲true的值 轉換爲false的值
String 任何非空字符串 ""(空字符串)
Number 任何非零數字值(包括無窮大) 0和NaN
Object 任何對象 null
Undefined (不適用) undefined

Number類型

Number類型使用IEEE754格式來表示整數和浮點數值。

1.浮點數值

  • 所謂浮點數值,就是該數值中必須包含一個小數點,而且小數點後必須至少有一位數字

  • 保存浮點數值須要的內存空間是保存整數值的兩倍,所以ECMAScript會不時地將浮點數值轉換爲整數值。

  • 對於極大極小的數值,能夠用e表示法(科學計數法)表示的浮點數值表示。用e表示法表示的數值等於e前面的數值乘以10的指數次冪。

  • 浮點數值的最高精度是17位小數。

2.數值範圍

  • 若是某次計算的結果獲得了一個超出JS數值範圍的值,那麼這個數值將被自動轉換成特殊的Infinity值

  • 想要肯定一個數值是不是無窮的,可使用isFinite() 函數

3.NaN

NaN,即非數值是一個特殊的數值,這個數值用於表示一個原本要返回數值的操做數未返回數值的狀況(這樣就不會拋出錯誤)。

  1. 任何涉及NaN的操做都會返回NaN

  2. NaN與任何值都不相等,包括NaN自己

  3. isNaN()函數能夠肯定參數是否「不是數值」

4.數值轉換

有三個函數能夠把非數值轉換爲數值:Number()parseInt()parseFloat()。轉型函數Number()能夠用於任何數據類型,而另外兩個函數則專門用於把字符串轉換成數值。

Number()轉換規則以下
  1. 若是是Boolean值,true和false將分別被轉換爲1和0。

  2. 若是是數字值,只是簡單的傳入和傳出。

  3. 若是是null值,返回0。

  4. 若是是undefined,返回NaN。

  5. 若是是字符串,遵循如下規則:

  • 若是字符串中只包含數字,則將其轉換爲十進制數值;

  • 若是字符串中包含有效的浮點格式,則將其轉換爲對應的浮點數值;

  • 若是字符串中包含有效的十六進制格式,例如"0xf",則將其轉換爲相同大小的十進制整數值;

  • 若是字符串是空的(不包含任何字符),則將其轉換爲0;

  • 若是字符串中包含除上述格式以外的字符,則將其轉換爲NaN;

  1. 若是是對象,則調用對象的valueOf()的方法,而後依照前面的規則轉換返回的值。

parseInt()函數

Number()函數在轉換字符串的時候比較複雜且不夠合理,所以處理整數的時候更經常使用parseInt()
parseInt()函數在轉換字符串時,更多的是看其是否符合數值模式。它會忽略字符串前面的空格,直至找到第一個非空格字符。若是第一個字符不是數字或者符號,parseInt()就會返回NaN。若是第一個字符是數字字符,parseInt()會繼續解析,知道解析完全部或者遇到了非數字字符。

parseInt()轉換空字符串會返回NaN,而Number()對空字符串返回0。

這個函數的第二個參數是轉換時使用的基數。(建議不管在任何狀況下都指定基數)

parseFloat()函數

parseInt()函數相似。區別爲:

  • 字符串中第一個小數點是有效的,後面的小數點都是無效的

  • parseFloat()只解析十進制值,所以它沒有用第二個參數指定基數的方法。它始終會忽略前面的0。

String類型

String類型用於表示由零或多個16位Unicode字符組成的字符序列,即字符串。用雙引號表示的字符串和用單引號表示的字符串徹底相同。

字符字面量

  • 字符字面量能夠出如今字符串中的任意位置,並且也將被做爲一個字符來解析。

  • 任何字符串的長度均可以經過訪問其length屬性取得。

字符串的特色

ECMAScript中的字符串是不可變的,也就是說,字符串一旦建立,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷燬原來的字符串。

轉換爲字符串

  1. 數值、布爾值、對象和字符串值(返回字符串的一個副本)都有toString()方法。但null和undefined沒有這個方法,能夠傳遞一個參數:輸出數值的基數。

  2. 轉型函數String()

  • 若是值有toString()方法,則調用該方法(沒有參數)並返回相應的結果;

  • 若是值是null,則返回"null";

  • 若是值是undefined,則返回"undefined"。

Object類型

對象能夠經過new操做符建立:var o = new Object();
Object的每一個實例都具備下列屬性和方法:

  • constructor:保存着用於建立當前對象的函數。

  • hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象實例中(而不是在實例的原型中)是否存在。其中,做爲參數的屬性名(propertyName)必須以字符串的形式指定。

  • isPrototypeOf(object):用於檢查傳入的對象是不是傳入對象的原型。

  • propertyIsEnumerable(propertyName):用於檢查給定的屬性是否可以使用for-in語句來枚舉

  • toLocaleString():返回對象的字符串表示,該字符串與執行環境的地區對應。

  • toString():返回對象的字符串表示。

  • valueOf():返回對象的字符串、數值或布爾值表示。一般與toString()方法的返回值相同。

操做符

一元操做符

只能操做一個值的操做符叫作一元操做符

  • 執行前置遞增和遞減操做時,變量的值都是在語句被求值之前改變的(副效應)。

  • 在對非數值應用一元加操做符時,該操做符會像Number()轉型函數同樣對這個值執行轉換

布爾操做符

布爾操做符共有三個:非(!)、與(&&)、或(||)。

同時使用兩個邏輯非操做符,實際上就會模擬Boolean()轉型函數的行爲

乘性操做符

若是參與乘性計算的某個操做數不是數值,後臺會先使用Number()轉型函數將其轉換爲數值。

加性操做符

對於加法操做符(+)來講:

  • 若是兩個操做數都是字符串,則將第二個操做數與第一個操做數拼接起來;

  • 若是隻有一個操做數是字符串,則將另外一個操做數轉換爲字符串,而後再將兩個字符串拼接起來

  • 若是有一個操做數是對象、數值、或布爾值,則調用他們的toString()方法取得相應的字符串的值,再應用前面關於字符串的規則;

  • 對於undefined和null,則分別調用String()函數並取得字符串"undefined"和"null";

  • 每一個加法操做都是獨立執行的

對於減法操做符(-)來講:

  • 若是有一個操做數是字符串、布爾值、null或undefined,則如今後臺調用Number()函數將其轉換爲數值,而後再根據前面的規則執行減法計算。若是轉換的結果是NaN,則減法的結果就是NaN;

  • 若是有一個操做數是對象,則調用對象的valueOf()方法以取得表示該對象的數值。若是獲得的值是NaN,則減法的結果就是NaN。若是對象沒有valueOf()方法,則調用其toString()方法並將獲得的字符串轉換爲數值;

關係操做符

當關系操做符使用了非數值時:

  • 若是兩個操做數都是字符串,則比較兩個字符串中對應位置的每一個字符的字符編碼值;

  • 若是一個操做數是數值,則將另外一個操做數轉換爲一個數值,而後執行數值比較;

  • 若是一個操做數是對象,則調用這個對象的valueOf()方法,用獲得的結果按照前面的規則進行比較。若是對象沒有valueOf()方法,則調用toString()方法,並用獲得的結果根據前面的規則執行比較;

  • 若是一個操做數是布爾值,則先將其轉換爲數值,而後再執行比較;

任何操做數與NaN進行關係比較,結果都是false

相等操做符

相等和不相等:先轉換再比較;全等和不全等:僅比較而不轉換

相等和不相等(==、!=)

在轉換不一樣的數據類型時,遵循如下規則:

  • 若是有一個操做數是布爾值,則在比較相等性以前先將其轉換爲數值:false轉換爲0,而true轉換爲1;

  • 若是有一個操做數是字符串,另外一個操做數是數值,在比較相等性以前先將字符串轉換爲數值;

  • 若是一個操做數是對象,另外一個操做數不是,則調用對象的valueOf()方法,用獲得的基本類型值按照前面的規則進行比較

這倆操做符在進行比較時要遵循:

  • null == undefined;

  • 要比較相等性以前,不能將null和undefined轉換成其餘任何值;

  • 若是有一個操做數是NaN,則相等操做符返回false,不相等操做符返回true。即便兩個操做數都是NaN,相等操做符也返回false;由於按照規則,NaN不等於NaN;

  • 若是兩個操做數都是對象,則比較它們是否是同一個對象。若是兩個操做數都指向同一個對象,則相等操做符返回true,不然返回false;

全等和不全等(===、!==)

它只在兩個操做數未經轉換就相等的狀況下返回true;

null === undefined // false

語句

if語句

  • 解析器會自動調用Boolean()轉換函數將條件表達式的結果轉化爲一個布爾值;

  • 條件操做符:variable = boolean_expression ? true_value : false_value;

循環語句

  • do-while語句是一種後測試循環語句,即只有在循環體中的代碼執行以後,纔會測試出口條件。在對條件表達式求值以前,循環體內的代碼至少會被執行一次。

  • while語句屬於前測試循環語句,也就是說,在循環體內的代碼被執行以前,就會對出口條件求值。所以循環體內代碼有可能永遠不會被執行。

  • 使用while循環作不到的,使用for循環一樣也作不到。能夠說for循環只是把與循環有關的代碼集中在了一個位置

  • for-in語句是一種精準的迭代語句,能夠用來枚舉對象的屬性

break和continue

  • break語句會當即退出循環,強制繼續執行循環後面的語句;

  • continue語句雖然也是當即退出循環,但退出循環後會從循環的頂部繼續執行;

with

  • with語句的做用是將代碼的做用域設置到一個特定的對象中;

  • 定義with語句的目的主要是爲了簡化屢次編寫同一個對象的工做;

  • 嚴格模式下不容許使用with語句;

switch語句

  • 省略break關鍵字,會致使執行完當前case後,繼續執行下一個case;

  • default關鍵字用於在表達式不匹配前面任何一種情形的時候,執行代碼(至關於else);

  • switch語句在比較值時使用的是全等操做符,所以不會發生類型轉換;

函數

  1. 任何函數在任什麼時候候均可以經過return語句後跟要返回的值來實現返回值

  2. 位於return語句以後的任何代碼都永遠不會執行

  3. return語句後也能夠不帶有任何返回值。在這種狀況下,函數在中止執行後將返回undefined值。這種作法通常用在須要提早中止函數執行而又不須要返回值的狀況。

  4. arguments對象是一個類數組對象,能夠經過方括號語法訪問它的每個元素,也可使用length屬性來肯定傳遞進來多少個參數。

相關文章
相關標籤/搜索