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