摘要:高程讀書筆記第三章語法中的一切變量函數(shù)名和操作符都區(qū)分大小寫。建議無論在任何情況下都指定基數(shù)函數(shù)與函數(shù)類似。返回對象的字符串?dāng)?shù)值或布爾值表示。
JS高程讀書筆記--第三章 語法
ECMAScript中的一切(變量、函數(shù)名和操作符)都區(qū)分大小寫。
不能把關(guān)鍵字、保留字、true、false和null用做標(biāo)識符。
嚴(yán)格模式是為JavaScript定義了一種不同的解析與執(zhí)行模型。在嚴(yán)格模式下,ECMAScript3中的一些不確定的行為將得到處理,而且對某些不安全的操作也會拋出錯誤。("use strict";)。
ECMAScript中的語句以一個分號結(jié)尾;如果省略分號,則由解析器確定語句的結(jié)尾。
關(guān)鍵字可以用于表示控制語句的開始或結(jié)束,或者用于執(zhí)行特定的操作等。
保留字某種意義上是為了將來的關(guān)鍵字而保留的單詞。
ECMAScript的變量是松散類型的,可以用來保存任何類型的數(shù)據(jù),每個變量僅僅是一個用于保存值得占位符而已。
數(shù)據(jù)類型ECMAScript中有5種簡單數(shù)據(jù)類型(基本數(shù)據(jù)類型):Undefined、Null、Boolean、Number和String,還有一種復(fù)雜數(shù)據(jù)類型:Object。
typeof操作符typeof是一個操作符而不是函數(shù)。對一個值使用typeof操作符可能返回下列某個字符串:
"undefined"--如果這個值未定義;
"boolean"--如果這個值是布爾值;
"string"--如果這個值是字符串;
"number"--如果這個值是數(shù)值;
"object"--如果這個值是對象或null;
"function"--如果這個值是函數(shù);
Undefined類型調(diào)用typeof null會返回"object",因為特殊值null被認(rèn)為是一個空的對象的引用
可以通過typeof操作符來區(qū)分函數(shù)和其他對象
Undefined類型只有一個值,即特殊的undefined。在使用var聲明變量但未對其加以初始化時,這個變量就是undefined。
Null類型注:typeof操作符返回"undefined"值時,可以檢測變量是否被聲明,而不是是否初始化。因為對未聲明的變量執(zhí)行typeof操作符也返回"undefined"
Null類型是第二個只有一個值的數(shù)據(jù)類型,這個特殊的值是null。從邏輯角度來看,null值表示一個空對象指針。
如果定義的變量準(zhǔn)備在將來用于保存對象,那么最好將該變量初始化為null而不是其他值
null == undefined // 返回true
Boolean類型Boolean類型只有兩個字面值:true和false(小寫)。
JS中所有類型的值都有與這兩個Boolean值等價的值,可以調(diào)用轉(zhuǎn)換函數(shù)Boolean ( )。
數(shù)據(jù)類型 | 轉(zhuǎn)換為true的值 | 轉(zhuǎn)換為false的值 |
---|---|---|
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零數(shù)字值(包括無窮大) | 0和NaN |
Object | 任何對象 | null |
Undefined | (不適用) | undefined |
Number類型使用IEEE754格式來表示整數(shù)和浮點數(shù)值。
1.浮點數(shù)值所謂浮點數(shù)值,就是該數(shù)值中必須包含一個小數(shù)點,并且小數(shù)點后必須至少有一位數(shù)字
保存浮點數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍,因此ECMAScript會不時地將浮點數(shù)值轉(zhuǎn)換為整數(shù)值。
對于極大極小的數(shù)值,可以用e表示法(科學(xué)計數(shù)法)表示的浮點數(shù)值表示。用e表示法表示的數(shù)值等于e前面的數(shù)值乘以10的指數(shù)次冪。
浮點數(shù)值的最高精度是17位小數(shù)。
2.數(shù)值范圍如果某次計算的結(jié)果得到了一個超出JS數(shù)值范圍的值,那么這個數(shù)值將被自動轉(zhuǎn)換成特殊的Infinity值
想要確定一個數(shù)值是否是無窮的,可以使用isFinite() 函數(shù)
3.NaNNaN,即非數(shù)值是一個特殊的數(shù)值,這個數(shù)值用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況(這樣就不會拋出錯誤)。
任何涉及NaN的操作都會返回NaN
NaN與任何值都不相等,包括NaN本身
isNaN()函數(shù)可以確定參數(shù)是否“不是數(shù)值”
4.數(shù)值轉(zhuǎn)換有三個函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number()、parseInt()和parseFloat()。轉(zhuǎn)型函數(shù)Number()可以用于任何數(shù)據(jù)類型,而另外兩個函數(shù)則專門用于把字符串轉(zhuǎn)換成數(shù)值。
如果是Boolean值,true和false將分別被轉(zhuǎn)換為1和0。
如果是數(shù)字值,只是簡單的傳入和傳出。
如果是null值,返回0。
如果是undefined,返回NaN。
如果是字符串,遵循以下規(guī)則:
如果字符串中只包含數(shù)字,則將其轉(zhuǎn)換為十進制數(shù)值;
如果字符串中包含有效的浮點格式,則將其轉(zhuǎn)換為對應(yīng)的浮點數(shù)值;
如果字符串中包含有效的十六進制格式,例如"0xf",則將其轉(zhuǎn)換為相同大小的十進制整數(shù)值;
如果字符串是空的(不包含任何字符),則將其轉(zhuǎn)換為0;
如果字符串中包含除上述格式之外的字符,則將其轉(zhuǎn)換為NaN;
如果是對象,則調(diào)用對象的valueOf()的方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值。
Number()函數(shù)在轉(zhuǎn)換字符串的時候比較復(fù)雜且不夠合理,因此處理整數(shù)的時候更常用parseInt()。
parseInt()函數(shù)在轉(zhuǎn)換字符串時,更多的是看其是否符合數(shù)值模式。它會忽略字符串前面的空格,直至找到第一個非空格字符。如果第一個字符不是數(shù)字或者符號,parseInt()就會返回NaN。如果第一個字符是數(shù)字字符,parseInt()會繼續(xù)解析,知道解析完所有或者遇到了非數(shù)字字符。
parseInt()轉(zhuǎn)換空字符串會返回NaN,而Number()對空字符串返回0。
這個函數(shù)的第二個參數(shù)是轉(zhuǎn)換時使用的基數(shù)。(建議無論在任何情況下都指定基數(shù))
與parseInt()函數(shù)類似。區(qū)別為:
字符串中第一個小數(shù)點是有效的,后面的小數(shù)點都是無效的
parseFloat()只解析十進制值,因此它沒有用第二個參數(shù)指定基數(shù)的方法。它始終會忽略前面的0。
String類型String類型用于表示由零或多個16位Unicode字符組成的字符序列,即字符串。用雙引號表示的字符串和用單引號表示的字符串完全相同。
字符字面量字符字面量可以出現(xiàn)在字符串中的任意位置,而且也將被作為一個字符來解析。
任何字符串的長度都可以通過訪問其length屬性取得。
字符串的特點ECMAScript中的字符串是不可變的,也就是說,字符串一旦創(chuàng)建,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷毀原來的字符串。
轉(zhuǎn)換為字符串數(shù)值、布爾值、對象和字符串值(返回字符串的一個副本)都有toString()方法。但null和undefined沒有這個方法,可以傳遞一個參數(shù):輸出數(shù)值的基數(shù)。
轉(zhuǎn)型函數(shù)String()
如果值有toString()方法,則調(diào)用該方法(沒有參數(shù))并返回相應(yīng)的結(jié)果;
如果值是null,則返回"null";
如果值是undefined,則返回"undefined"。
Object類型對象可以通過new操作符創(chuàng)建:var o = new Object();。
Object的每個實例都具有下列屬性和方法:
constructor:保存著用于創(chuàng)建當(dāng)前對象的函數(shù)。
hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對象實例中(而不是在實例的原型中)是否存在。其中,作為參數(shù)的屬性名(propertyName)必須以字符串的形式指定。
isPrototypeOf(object):用于檢查傳入的對象是否是傳入對象的原型。
propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句來枚舉
toLocaleString():返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng)。
toString():返回對象的字符串表示。
valueOf():返回對象的字符串、數(shù)值或布爾值表示。通常與toString()方法的返回值相同。
操作符 一元操作符只能操作一個值的操作符叫做一元操作符
執(zhí)行前置遞增和遞減操作時,變量的值都是在語句被求值以前改變的(副效應(yīng))。
在對非數(shù)值應(yīng)用一元加操作符時,該操作符會像Number()轉(zhuǎn)型函數(shù)一樣對這個值執(zhí)行轉(zhuǎn)換
布爾操作符布爾操作符共有三個:非(!)、與(&&)、或(||)。
乘性操作符同時使用兩個邏輯非操作符,實際上就會模擬Boolean()轉(zhuǎn)型函數(shù)的行為
如果參與乘性計算的某個操作數(shù)不是數(shù)值,后臺會先使用Number()轉(zhuǎn)型函數(shù)將其轉(zhuǎn)換為數(shù)值。
加性操作符對于加法操作符(+)來說:
如果兩個操作數(shù)都是字符串,則將第二個操作數(shù)與第一個操作數(shù)拼接起來;
如果只有一個操作數(shù)是字符串,則將另一個操作數(shù)轉(zhuǎn)換為字符串,然后再將兩個字符串拼接起來
如果有一個操作數(shù)是對象、數(shù)值、或布爾值,則調(diào)用他們的toString()方法取得相應(yīng)的字符串的值,再應(yīng)用前面關(guān)于字符串的規(guī)則;
對于undefined和null,則分別調(diào)用String()函數(shù)并取得字符串"undefined"和"null";
每個加法操作都是獨立執(zhí)行的
對于減法操作符(-)來說:
如果有一個操作數(shù)是字符串、布爾值、null或undefined,則現(xiàn)在后臺調(diào)用Number()函數(shù)將其轉(zhuǎn)換為數(shù)值,然后再根據(jù)前面的規(guī)則執(zhí)行減法計算。如果轉(zhuǎn)換的結(jié)果是NaN,則減法的結(jié)果就是NaN;
如果有一個操作數(shù)是對象,則調(diào)用對象的valueOf()方法以取得表示該對象的數(shù)值。如果得到的值是NaN,則減法的結(jié)果就是NaN。如果對象沒有valueOf()方法,則調(diào)用其toString()方法并將得到的字符串轉(zhuǎn)換為數(shù)值;
關(guān)系操作符當(dāng)關(guān)系操作符使用了非數(shù)值時:
如果兩個操作數(shù)都是字符串,則比較兩個字符串中對應(yīng)位置的每個字符的字符編碼值;
如果一個操作數(shù)是數(shù)值,則將另一個操作數(shù)轉(zhuǎn)換為一個數(shù)值,然后執(zhí)行數(shù)值比較;
如果一個操作數(shù)是對象,則調(diào)用這個對象的valueOf()方法,用得到的結(jié)果按照前面的規(guī)則進行比較。如果對象沒有valueOf()方法,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則執(zhí)行比較;
如果一個操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)值,然后再執(zhí)行比較;
相等操作符任何操作數(shù)與NaN進行關(guān)系比較,結(jié)果都是false
相等和不相等:先轉(zhuǎn)換再比較;全等和不全等:僅比較而不轉(zhuǎn)換
相等和不相等(==、!=)在轉(zhuǎn)換不同的數(shù)據(jù)類型時,遵循以下規(guī)則:
如果有一個操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值:false轉(zhuǎn)換為0,而true轉(zhuǎn)換為1;
如果有一個操作數(shù)是字符串,另一個操作數(shù)是數(shù)值,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值;
如果一個操作數(shù)是對象,另一個操作數(shù)不是,則調(diào)用對象的valueOf()方法,用得到的基本類型值按照前面的規(guī)則進行比較
這倆操作符在進行比較時要遵循:
null == undefined;
要比較相等性之前,不能將null和undefined轉(zhuǎn)換成其他任何值;
如果有一個操作數(shù)是NaN,則相等操作符返回false,不相等操作符返回true。即使兩個操作數(shù)都是NaN,相等操作符也返回false;因為按照規(guī)則,NaN不等于NaN;
如果兩個操作數(shù)都是對象,則比較它們是不是同一個對象。如果兩個操作數(shù)都指向同一個對象,則相等操作符返回true,否則返回false;
全等和不全等(===、!==)它只在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回true;
語句 if語句null === undefined // false
解析器會自動調(diào)用Boolean()轉(zhuǎn)換函數(shù)將條件表達式的結(jié)果轉(zhuǎn)化為一個布爾值;
條件操作符:variable = boolean_expression ? true_value : false_value;
循環(huán)語句do-while語句是一種后測試循環(huán)語句,即只有在循環(huán)體中的代碼執(zhí)行之后,才會測試出口條件。在對條件表達式求值之前,循環(huán)體內(nèi)的代碼至少會被執(zhí)行一次。
while語句屬于前測試循環(huán)語句,也就是說,在循環(huán)體內(nèi)的代碼被執(zhí)行之前,就會對出口條件求值。因此循環(huán)體內(nèi)代碼有可能永遠不會被執(zhí)行。
使用while循環(huán)做不到的,使用for循環(huán)同樣也做不到。可以說for循環(huán)只是把與循環(huán)有關(guān)的代碼集中在了一個位置
for-in語句是一種精準(zhǔn)的迭代語句,可以用來枚舉對象的屬性
break和continuebreak語句會立即退出循環(huán),強制繼續(xù)執(zhí)行循環(huán)后面的語句;
continue語句雖然也是立即退出循環(huán),但退出循環(huán)后會從循環(huán)的頂部繼續(xù)執(zhí)行;
withwith語句的作用是將代碼的作用域設(shè)置到一個特定的對象中;
定義with語句的目的主要是為了簡化多次編寫同一個對象的工作;
嚴(yán)格模式下不允許使用with語句;
switch語句省略break關(guān)鍵字,會導(dǎo)致執(zhí)行完當(dāng)前case后,繼續(xù)執(zhí)行下一個case;
default關(guān)鍵字用于在表達式不匹配前面任何一種情形的時候,執(zhí)行代碼(相當(dāng)于else);
switch語句在比較值時使用的是全等操作符,因此不會發(fā)生類型轉(zhuǎn)換;
函數(shù)任何函數(shù)在任何時候都可以通過return語句后跟要返回的值來實現(xiàn)返回值
位于return語句之后的任何代碼都永遠不會執(zhí)行
return語句后也可以不帶有任何返回值。在這種情況下,函數(shù)在停止執(zhí)行后將返回undefined值。這種做法一般用在需要提前停止函數(shù)執(zhí)行而又不需要返回值的情況。
arguments對象是一個類數(shù)組對象,可以通過方括號語法訪問它的每一個元素,也可以使用length屬性來確定傳遞進來多少個參數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/86401.html
摘要:高程讀書筆記第六章理解對象創(chuàng)建自定義對象的方式有創(chuàng)建一個實例,然后為它添加屬性和方法。創(chuàng)建了自定義的構(gòu)造函數(shù)之后,其原型對象默認(rèn)只會取得屬性至于其他方法都是從繼承而來的。 JS高程讀書筆記--第六章 理解對象 創(chuàng)建自定義對象的方式有創(chuàng)建一個Object實例,然后為它添加屬性和方法。還可用創(chuàng)建對象字面量的方式 屬性類型 ECMAScript在定義只有內(nèi)部采用的特性時,描述了屬性的各種特征...
摘要:創(chuàng)建一個新對象將構(gòu)造函數(shù)的作用域賦給新對象因此就指向了這個新對象執(zhí)行構(gòu)造函數(shù)中的代碼為這個新對象添加屬性返回新對象。 本章內(nèi)容 理解對象屬性 理解并創(chuàng)建對象 理解繼承 ECMA-262把對象定義為:無序?qū)傩缘募希鋵傩钥梢园局怠ο蠡蛘吆瘮?shù) 理解對象 創(chuàng)建對象 創(chuàng)建自定義對象的最簡單方式就是創(chuàng)建一個Object的實例,再為它添加屬性和方法。 var person = new...
摘要:高程讀書筆記第五章類型創(chuàng)建實例的方式有兩種。第一種是使用操作符后跟構(gòu)造函數(shù),另一種方式是使用對象字面量表示法。 JS高程讀書筆記--第五章 Object類型 創(chuàng)建Object實例的方式有兩種。第一種是使用new操作符后跟Object構(gòu)造函數(shù),另一種方式是使用對象字面量表示法。 在通過對象字面量定義對象時,實際上不會調(diào)用Object構(gòu)造函數(shù) 訪問對象屬性時可以使用點表示法和方括號表示法。...
摘要:操作符,會將數(shù)值改變正數(shù)變成負數(shù)負數(shù)變成正數(shù)。同時,也說明了,使用兩個邏輯非操作符和的操作結(jié)果相同。操作符得到的是余數(shù)。不相等操作符有兩種。 這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第三章。 1.操作符 1-1 一元操作符 遞增和遞減操作符 遞增和遞減操作符有兩個 ++ 和 --。一元操作符使用的時候,可以前置也可以后置。由于兩個操作方式類似,先只說明 ...
摘要:的理解函數(shù)與其他語言函數(shù)最大的不同在于,其不介意傳入多少參數(shù)以及參數(shù)的類型比如函數(shù)的形參有兩個,但是調(diào)用函數(shù)傳入的參數(shù)可以寫一個,三個或不寫參數(shù)對應(yīng)等,解析器都可以正常解析,這是因為中參數(shù)在內(nèi)部是以一個數(shù)組形式來表示,故而不需要關(guān)系傳入?yún)?shù) ECMAScript function的理解 ECMAScript 函數(shù)與其他語言函數(shù)最大的不同在于,其不介意傳入多少參數(shù)以及參數(shù)的類型...
閱讀 2436·2021-10-09 09:44
閱讀 3792·2021-09-22 15:43
閱讀 2925·2021-09-02 09:47
閱讀 2539·2021-08-12 13:29
閱讀 3871·2019-08-30 15:43
閱讀 1680·2019-08-30 13:06
閱讀 2189·2019-08-29 16:07
閱讀 2745·2019-08-29 15:23