摘要:大小寫的不同分別表示不同的變量。本質(zhì)由一組無序的名值對組成的。字符串中第一個(gè)小數(shù)點(diǎn)有效,第二個(gè)無效,后面的字符串會被忽略。注意雙引號開頭,必須以雙引號結(jié)尾,單引號也是如此轉(zhuǎn)義字符表示非打印字符或具有其他用途的字符。
JavaScript高級程序設(shè)計(jì)(第3版)讀書筆記
1.區(qū)分大小寫:變量、函數(shù)名和操作符都要區(qū)分大小寫。大小寫的不同分別表示不同的變量。2.標(biāo)識符:
變量、函數(shù)、屬性、函數(shù)參數(shù)的名字。
注意:
開頭必須字母、下劃線、一個(gè)美元符號$
其他字符可以是字母、下劃線、美元符號、數(shù)字。
也可以包含擴(kuò)展的ASCII或Unicode字母。(不推薦)
起名:采用駝峰大小寫格式:第一個(gè)字母小寫,剩下的每個(gè)有意義的單詞的首字母大寫
例子:firstSecond、myCar
3.注釋:單行注視//
塊級注釋/ /
4.嚴(yán)格模式:為JS定義一種不同的解析與執(zhí)行模型。(對某些不安全的操作拋出錯(cuò)誤) **開啟:在JS文件頂部添加"use strict";** 也可以在函數(shù)內(nèi)部的上方包含這條指示。 **支持版本:IE10+、Firefox 4+、Safari 5.1+、Opera12+ 、谷歌**5.語句:
每段代碼都要以;結(jié)尾。
注意:
如果省略了分號,由解析器確定語句的結(jié)尾。
雖然可以省略,但是加上了這個(gè)分號可以避免很多錯(cuò)誤,也可以增進(jìn)代碼的性能,解析器就不用推測哪里插入分號。
6.關(guān)鍵字和保留字:關(guān)鍵字:語言保留的,不能用做標(biāo)識符。 保留字:不能用做標(biāo)識符的。 **注意:在嚴(yán)格/非嚴(yán)格模式下保留字會有少不同**7.變量:
**js的變量是松散類型的,就是可以用來保存任何類型的數(shù)據(jù)。**
Var message = "hi";
var message = 18;
注意:
變量剛開始存儲"hi";然后被數(shù)字值100取代。(這種是可以的,但是不推薦)
用var修飾的變量,將成為定義該變量的作用域中的局部變量。
function test(){ var message = "hi";//局部 } test(); alert(message);//錯(cuò)誤
如果省略了var,從而創(chuàng)建了全句變量(嚴(yán)格模式下報(bào)錯(cuò))
以上面的例子為例:
調(diào)用了test(),這個(gè)變量就有定義,就可以在函數(shù)外的任何地方被調(diào)用。
可以使用一條語句定義多個(gè)變量用逗號分開(可初始化,也可以不初始化):
var a,b,c;
Var a = 1,b="11",c=false;
8.數(shù)據(jù)類型(JS具有動態(tài)性):1.**基本數(shù)據(jù)類型**:
Undefined
Null
Boolean
Number
String
2.復(fù)雜數(shù)據(jù)類型:
object。
本質(zhì):由一組無序的名值對組成的。
注意:js不支持任何創(chuàng)建自定義類型的機(jī)制,而所有值最終都將是上述6種數(shù)據(jù)類型之一
3.typeof操作符:
檢測給定變量的數(shù)據(jù)類型:typeof
使用typeo操作符可能返回以下情況:
‘undefined":這個(gè)值未定義。
‘boolean" :布爾值
string : 字符串
number : 數(shù)值
object : 對象或null
function : 函數(shù)
//typeof 可以數(shù)值或變量 var a = "some string"; alert(typeof a); //typeof括號可以省略 alert(typeof (a)); alert(typeof 11);
注意:
tupeof null 會返回 object. 特殊值:null被認(rèn)為是一個(gè)空的對象引用;
Safari5 、谷歌7之前的版本,對正則表達(dá)式調(diào)用typeof操作符會返回"function",而其他瀏覽器返回object.
注意:function也是個(gè)對象,不是一種數(shù)據(jù)類型,然而,函數(shù)也確實(shí)有一些特殊的屬性,通過typeof操作區(qū)分函數(shù)和其他對象是必要的。
4.Undefined 類型:Undefined 類型只有一個(gè)值,就是特殊的undefined. **在使用var聲明,但未對其初始化時(shí),這個(gè)變量的值就是underined**
var message; alert (message == undefined); ture //聲明了,但未對其進(jìn)行初始化。 //顯示 var message=undefined; alret (message == undefined); ture //不過,包含undefined的值的變量與尚未定義的變量還是不一樣的。 var messgae; //var age; alert(message); //undefined //使用alerg函數(shù)時(shí)尚未聲明的變量age--會導(dǎo)致錯(cuò)誤。 alert(age); //報(bào)錯(cuò) 如果都把a(bǔ)ge變量注釋掉了: //var age, var message; alret(type messgae); undefined; alret(type age); undefined;
注意:即便未初始化變量會自動賦值undefinde,但是顯示變量賦值是個(gè)明智的選擇
5.Null類型:Null類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型,特殊的值是null. null 代表著空對象指針. typeof檢測null,就會放回object
var car = null; alert(typeof car); // object
注意:如果變量存儲對象,請初始化null,而不是其他值。
只要直接檢測null值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個(gè)對象的引用:
if(car != null){ }
實(shí)際上,undefined值,來自null值的。
它們進(jìn)行判斷就是ture.
注意:它們有著這樣關(guān)系,但是用途不一樣
只要意在保存對象的變量還沒有真正保存對象,就保存null
6.Boolean 類型:兩個(gè)值:true和false
注意:
ture不一定等于1
false不一定等于0
區(qū)分大小寫
js所有類型的值都有與這兩個(gè)不貳值等價(jià)的值 要將值轉(zhuǎn)換對應(yīng)的布爾值,Boolean()函數(shù) var a = "11"; var message = Boolean(a); ture
轉(zhuǎn)換規(guī)則:
ture:
任何非空字符串
非0數(shù)字值
任何對象
n/a(不適用)
則反之
在控制語句中,自動執(zhí)行相應(yīng)的轉(zhuǎn)換規(guī)則 var message = "11"; if(message){ alert("ok"); }7.Number類型:
整數(shù)和浮點(diǎn)數(shù)值
整數(shù):
十進(jìn)制:10
八進(jìn)制: 第一位必須0,然后八進(jìn)制數(shù)字序列1(0-7),如果字面值中數(shù)值超出范圍,前導(dǎo)0被忽略,后面當(dāng)作十進(jìn)制
八進(jìn)制在嚴(yán)格模式無效
十六進(jìn)制,開頭0x,后面跟著十六進(jìn)制數(shù)字(0-9以及A-F),字母可以大寫也可以小寫
算術(shù)計(jì)算時(shí),八進(jìn)制和十六進(jìn)制表示的數(shù)值都被轉(zhuǎn)換十進(jìn)制數(shù)值
注意:正零和負(fù)0被認(rèn)為相等
浮點(diǎn)數(shù):
包含小數(shù)點(diǎn),小數(shù)點(diǎn)后面至少有一位數(shù)字。(小數(shù)點(diǎn)前面可以沒有整數(shù))
保存的浮點(diǎn)數(shù)值的內(nèi)存空間時(shí)整數(shù)的兩倍(所以小數(shù)點(diǎn)沒有任何數(shù)字。自動轉(zhuǎn)換整數(shù)來保存。如果是一個(gè)整數(shù)1.0,那么更會自動轉(zhuǎn)換了)
對于極大或極小的值,可以用e來表示,表示浮點(diǎn)數(shù)值
e表示:e前面的數(shù)值。乘以 10的指數(shù)次冪(即使是一個(gè)大寫或小寫的字母e)
var floatNum = 3.125e7 3.125 乘于十的七次方
5.e表示法,表示極小的數(shù)值
0.00000000000000003 3e-17 會把小數(shù)點(diǎn)六個(gè)0以上的浮點(diǎn)轉(zhuǎn)換為e表示
6.浮點(diǎn)最高精度是17位小數(shù)。計(jì)算其精度不如整數(shù)
0.1+0.2 結(jié)構(gòu)不是0.3,而是0.300000000004
if(a+b == 0.3){ alret("不要這樣測試"); }
注意,永遠(yuǎn)不呀測試某個(gè)特定的浮點(diǎn)數(shù)值。
注意:由于內(nèi)存的限制,ECMAScript并不能保存世界上所有的數(shù)值。 js中能夠表示的最小數(shù)值和最大的數(shù)值保存在Number. MIN_VALUE:這個(gè)值是5e-324; MAX_VALUE:這個(gè)值是1.7976931348623157e+308 **注意:計(jì)算的時(shí)候超過js數(shù)值范圍的值,那么數(shù)值自動轉(zhuǎn)換infinity值**
數(shù)值是負(fù)數(shù),-infinity(負(fù)無窮)
數(shù)值是正數(shù),infinity(正無窮)
注意:只要計(jì)算返回了正或負(fù)的infinnity值,將無法進(jìn)行下一次的計(jì)算
確認(rèn)最大值與最小值之間,可以使用isFinite()函數(shù),如果在范圍內(nèi),返回true
訪問: Number.NEGATIVB_INFINITY Number.POSITUVE_INFINITY 得到 負(fù) 和 正 infinity
即非數(shù)值,是一個(gè)特殊的數(shù)值。 表示一個(gè)本來要返回?cái)?shù)值的操作數(shù),未返回?cái)?shù)值的情況。(不會拋出錯(cuò)誤) **注意:任何數(shù)除于0會返回NaN,不會影響其他代碼的執(zhí)行**
任何涉及NaN的操作(NaN/10)都會返回NaN,(多步計(jì)算有可能導(dǎo)致問題)
NaN與任何值都不相等,包括NaN本身。
alert(NaN == NaN) //false
為針對上面情況:
isNaN()函數(shù)。 參數(shù)可以是任何類型,函數(shù)會幫我們,確定這個(gè)參數(shù)是否 “**不是數(shù)值**”。 它會嘗試把參數(shù)這個(gè)值,轉(zhuǎn)換為**數(shù)值**。不是數(shù)值的值會直接轉(zhuǎn)換為數(shù)值。 不能被轉(zhuǎn)換的數(shù)值的值都會導(dǎo)致這個(gè)函數(shù)返回true.
alert(isNaN(NaN)) ture alert(isNaN(10)) false alert(isNaN("10")) false alert(isNaN("blue")) ture alert(isNaN(ture)) false
NaN本身,即非數(shù)值。
數(shù)值10和字符串10,能轉(zhuǎn)換數(shù)值,返回了false
blue不能轉(zhuǎn)換數(shù)值
true可以轉(zhuǎn)換成數(shù)值1
Tips: isNaN也適合對象,在對象調(diào)用函數(shù)時(shí),首先會調(diào)用對象的valueOF方法,然后確定該方法返回的值是否可以轉(zhuǎn)換為數(shù)值。如果不能,基于這個(gè)返回值調(diào)用tostring方法,再測試返回值
非數(shù)值轉(zhuǎn)換為數(shù)值函數(shù):Number()、parseInt()、parseFloat
Number:用于任何數(shù)據(jù)類型
其他兩個(gè),把字符串轉(zhuǎn)換成數(shù)值
注意:這三個(gè)函數(shù)對于同樣的輸入會有返回不同的結(jié)果
Number轉(zhuǎn)換規(guī)則:
布爾值,true和false,轉(zhuǎn)換1和0
數(shù)字值,簡單的傳入和返回
null,返回0
undefined,返回NaN
字符串:
只包含數(shù)字(包含正負(fù)號情況),則將其轉(zhuǎn)換十進(jìn)制。(注意前導(dǎo)0會被忽略)
字符串是浮點(diǎn),轉(zhuǎn)換對應(yīng)的浮點(diǎn)數(shù)值。(忽略前導(dǎo)零);
字符串是十六進(jìn)制格式,轉(zhuǎn)換相同大小的十進(jìn)制整數(shù)
字符串是空,轉(zhuǎn)換為0
除了以上的格式外的字符串,轉(zhuǎn)換為NaN
6.如果對象,調(diào)用對象的valueOf(),然后按照上述的規(guī)則轉(zhuǎn)換返回的值。如果結(jié)果是NaN,調(diào)用對象的toString()方法。然后再按照上述規(guī)則轉(zhuǎn)換返回字符串值。
注意:該函數(shù)處理字符串畢竟復(fù)雜,不夠合理,因此處理整數(shù)的時(shí)候更常用,parseInt()函數(shù)
parseint函數(shù):
轉(zhuǎn)換字符串時(shí),看其是否符合數(shù)值模式。
忽略字符串前面的空格,直到找到第一個(gè)非空格字符串
如果第一個(gè)字符不是數(shù)字符串或著負(fù)號,返回NaN
用它轉(zhuǎn)換空字符會返回NaN.
如果第一字符串是數(shù)字字符串,繼續(xù)解析下一個(gè),直到解析完所有或遇到非數(shù)字符串。例如:123blue,blue會被完全忽略,轉(zhuǎn)換123.
如果是浮點(diǎn)數(shù),22.5,會轉(zhuǎn)換22,小數(shù)點(diǎn)并不是數(shù)字字符串。
如果字符串中的第一個(gè)字符是數(shù)字字符,識別各種整數(shù)格式(二、十、十六進(jìn)制)。如果以"0x"開頭會轉(zhuǎn)換十六個(gè)進(jìn)制。以0開頭并且后面跟著數(shù)字,八進(jìn)制來解析。
var a = parseInt("123blue") 123 var b = parseInt("") NaN var c = parseInt("0xA"); 10 var d = parseInt("22.5") 22 var e = parseInt("070") 56 var f = praseInt("70") 70 vae g = praseInt("0xf") 15
注意:js3和js5,轉(zhuǎn)換八進(jìn)制的時(shí)候,有所不同,在js5中,前導(dǎo)0被認(rèn)為無效,這個(gè)值當(dāng)成0,嚴(yán)格模式也是如此
解決辦法:
可以為parseint函數(shù),提供第二參數(shù),轉(zhuǎn)換使用的基數(shù)(多少進(jìn)制)
parseInt("0xAF",16); 175 parseInt("AF",16);175 parseInt("AF") NaN
注意:基數(shù)決定如何解析輸入的字符串,避免了錯(cuò)誤的解析,所以使用的時(shí)候,明確基數(shù)
parseFloat:
第一個(gè)字符串開始解析每一個(gè),直到末尾或遇到無效的浮點(diǎn)數(shù)字字符為止。
字符串中第一個(gè)小數(shù)點(diǎn)有效,第二個(gè)無效,后面的字符串會被忽略。22.34.5 轉(zhuǎn)換22。34
它會忽略前導(dǎo)0
十六進(jìn)制格式字符串,始終轉(zhuǎn)換0.。(只解析十進(jìn)制,沒有第二參數(shù)指定參數(shù)的用法)
如果字符串包含的是一個(gè)可解析為整數(shù)的數(shù)(沒有小數(shù)點(diǎn)或著小數(shù)點(diǎn)后都是0),它會返回整數(shù)。
var a = parseFloat("123blue") 123 var b = parseFloat("OxA") 0 var c = parseFloat("22.5") 22.5 var d = parseFloat("22.34.5") 22.34 var e = parseFloat("0808.5")808.5 var f = parseFloat("3.125e7") 312500008.String類型:
表示由0個(gè)或多個(gè)16位Unicode字符組成的字符序列,字符串。 字符串由雙引號或單引號表示。 **注意:雙引號開頭,必須以雙引號結(jié)尾,單引號也是如此**
換行 制表 空格 回車 f 進(jìn)紙 注釋 * 在字符串中使用,表示單個(gè)‘字符串 " 在字符串中使用,表示單個(gè)" xnn 以16進(jìn)制代碼nn表示的字符nn必須0-F unnnn 以16進(jìn)制代碼nnnn表示一個(gè)Unicode字符,n必須為0-F var test = "this is the letter sigma: u03a3." 長度28 6個(gè)轉(zhuǎn)義字符表示1個(gè)字符。 如果字符串中包含雙字節(jié)字符,那么length屬性可能不會精確地返回字符串中的字符數(shù)目。
**注意:JS中的字符串是不可變的,也就是,字符串一旦創(chuàng)建,它們的值就不能改變,** 要改變某個(gè)變量保存的字符串,必須先銷毀原來的字符串,其次用另一個(gè)包含新值的字符串填充改變量
var lang = "Java"; lang = lang + "Script"; lang剛開始由java字符串組成。 第二行l(wèi)ang的值重新定義為"java與Script"組合: 1.創(chuàng)建能容納10個(gè)字符的新字符串 2.然后在這個(gè)字符串中填充javascropt 3.最后銷毀原來Java和字符串“Script" 這個(gè)過程在后臺發(fā)生的,舊版本的瀏覽器中拼接字符串時(shí)速度很慢的原因所在
一個(gè)值轉(zhuǎn)換為另一個(gè)字符串有兩種方式:
toString()方法:數(shù)值、布爾值、對象、字符串都有這個(gè)方法,這個(gè)方法返回字符串中的一個(gè)副本,但是null和undefined值沒有這個(gè)方法。
一般不需要在這方法括號傳參數(shù),但是數(shù)值調(diào)用的時(shí)候,可以傳,進(jìn)制數(shù)(基數(shù))。
var age =11; var ageAsString = age.toString() 字符串11 var a =10; alert(a.toString(2)); 1010 注意:沒有參數(shù),默認(rèn)基數(shù)10.
在不知道要轉(zhuǎn)換的值是不是null或undefined,使用String(),能轉(zhuǎn)換任何類型的值
String函數(shù)轉(zhuǎn)換規(guī)則:
如果值有tostring方法,則調(diào)用該方法(沒有參數(shù))并返回相應(yīng)的結(jié)果
如果值是null,則返回null
如果值是undefined,則返回undefined
var a = 10; var b = true var c = null; var d; string(a) 10 string(b) true string(c) null String(d); undefined 前兩個(gè)個(gè):跟調(diào)用toString函數(shù),得到結(jié)果相同一樣。 后兩個(gè),沒有tostring方法,所以string函數(shù)就返回了這兩個(gè)值的字面量。9. Object 類型:
對象其實(shí)就是一組數(shù)據(jù)和功能的集合。 對象可以通過執(zhí)行new操作符跟要?jiǎng)?chuàng)建對象類型的名稱來創(chuàng)建 自定義對象:創(chuàng)建Object類型的實(shí)例并為其添加屬性和方法
var o = new Object();
跟Java創(chuàng)建對象差不多。
如果不給構(gòu)造函數(shù)傳遞參數(shù),可以省略后面那一對括號。 var 0 = new Object//有效不推薦
理解一個(gè)重要思想:
Object 類型所具有的任何屬性和方法同樣存在于更具體的對象中。(Object根類)
Object的每個(gè)實(shí)例具有以下屬性和方法:
Constructor:保存著用于創(chuàng)建當(dāng)前對象的函數(shù)。 構(gòu)造函數(shù):就是Object().
hasOwnProperty(propertyName):用于檢查給定的屬性是否在當(dāng)前對象實(shí)例中(而不是在實(shí)例的原型中)。
參數(shù)屬性名:必須字符串形勢指定 :o.hasOwnProperty("name")
isPrototypeof(Object):檢查傳入的對象是否是另一個(gè)對象的原型
propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句。必須與字符串形勢指定。
toLocaleString():返回對象以字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng)
toString():返回對象以字符串表示
valueof():返回對象以字符串、數(shù)值、布爾值表示。與toString方法返回值相同。
注意:object是所有對象的基礎(chǔ),因此所有對象都具有這些基本的屬性和方法
對象的行為不一定適用于JavaScript中的其他對象:
瀏覽器環(huán)境中的宿主對象:BOM、DOM
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100723.html
摘要:與執(zhí)行環(huán)境相關(guān)的變量對象中有執(zhí)行環(huán)境定義的所有變量和函數(shù)作用域鏈代碼在一個(gè)環(huán)境中執(zhí)行,便會創(chuàng)建變量對象的一個(gè)作用域鏈。 執(zhí)行環(huán)境 執(zhí)行環(huán)境是什么? javascript的解釋器每次開始執(zhí)行一個(gè)函數(shù)時(shí),都會為每個(gè)函數(shù)創(chuàng)建一個(gè)執(zhí)行環(huán)境(execution context)。 執(zhí)行環(huán)境定義了變量或者函數(shù)有權(quán)訪問的其他數(shù)據(jù),決定了他們各自的行為。 與執(zhí)行環(huán)境相關(guān)的變量對象(...
摘要:客戶端檢測方式能力檢測怪癖檢測用戶代理檢測能力檢測最常用也是最為人們廣泛接受的客戶端檢測形式是能力檢測又稱特性檢測。在可能的情況下,盡量使用進(jìn)行能力檢測。 客戶端檢測方式 能力檢測 怪癖檢測 用戶代理檢測 能力檢測 最常用也是最為人們廣泛接受的客戶端檢測形式是能力檢測(又稱特性檢測)。能力檢測的目標(biāo)不是識別特定的瀏覽器,而是識別瀏覽器的能力。采用這種方式不必顧及特定的瀏覽器如何...
摘要:語法語法可以表示三種類型的值簡單值使用與相同的語法,可以在中表示字符串?dāng)?shù)值布爾值和。對象對象作為一種復(fù)雜數(shù)據(jù)類型,表示的是一組無序的鍵值對兒。如果字符串長度超過了個(gè),結(jié)果中將只出現(xiàn)前個(gè)字符。 JSON 語法 JSON語法可以表示三種類型的值 簡單值:使用與 JavaScript 相同的語法,可以在 JSON 中表示字符串、數(shù)值、布爾值和 null 。但 JSON 不支持 JavaS...
摘要:簡介簡史誕生于年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。實(shí)現(xiàn)一個(gè)完整的由三部分組成核心文檔對象模型瀏覽器對象模型就是對實(shí)現(xiàn)該標(biāo)準(zhǔn)規(guī)定的各個(gè)方面內(nèi)容的語言的描述。把整個(gè)頁面映射為一個(gè)多層節(jié)點(diǎn)結(jié)構(gòu)。由萬維網(wǎng)聯(lián)盟規(guī)劃。主要目標(biāo)是映射文檔的結(jié)構(gòu)。 JavaScript簡介 JavaScript簡史 JavaScript誕生于1995年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。 如果沒有表單驗(yàn)證的功能,填入信息之...
showImg(http://img3.douban.com/lpic/s8958650.jpg); 0x00 javascript組成 ECMAScript(-265)核心語言部分 DOM文檔對象模型(DOM1、2、3) BOM瀏覽器對象模型(提供與瀏覽器交互的接口和方法) 0x01 async 異步加載 執(zhí)行順序不定 charset defer 延遲加載,立即下載腳本但不執(zhí)行 src ...
閱讀 1772·2021-11-18 13:20
閱讀 1163·2021-10-11 10:59
閱讀 2995·2021-08-24 10:01
閱讀 3509·2019-08-29 14:21
閱讀 3359·2019-08-29 14:15
閱讀 3527·2019-08-26 12:23
閱讀 3348·2019-08-26 11:46
閱讀 3355·2019-08-26 11:35