摘要:二進(jìn)制浮點(diǎn)數(shù)和四舍五入錯(cuò)誤在使用實(shí)數(shù)時(shí),常常只是真實(shí)值的一個(gè)近似表示。作用域分類全局函數(shù),塊級(jí)作用域鏈變量對(duì)象用于存儲(chǔ)執(zhí)行上下文中的變量函數(shù)聲明函數(shù)參數(shù)變量初始化階段瀏覽器截圖瀏覽器截圖代碼執(zhí)行階段類和模塊
詞法結(jié)構(gòu) 字符集
使用Unicode編寫
ES3 Unicode2.1+
ES5 Unicode3+
區(qū)分大小寫 注釋// 注釋 /* 注釋 */標(biāo)識(shí)符和保留字
必須以字母、下劃線、美元符開始,后續(xù)字符可以是字母、數(shù)字、下劃線、美元符,即數(shù)字不能作為首字符
保留字Javascript只有在缺少了分號(hào)就無法正確解析代碼的時(shí)候才會(huì)填補(bǔ)分號(hào)。
一般,一條語句以(、[、/、+、-開始,它極有可能和前一條語句一起解析。return、break、continue除外
類型、值和變量數(shù)據(jù)類型:在編程語言中、能夠表示并操作的值的類型
變量:一個(gè)值的符號(hào)名稱,可以通過該名稱獲得值的引用。
數(shù)據(jù)類型 一般分類原始類型:數(shù)字、字符串、布爾值、null、undefined
對(duì)象(屬性的鍵值對(duì)集合)類型:數(shù)組、普通對(duì)象、函數(shù)類、日期類、正則類、錯(cuò)誤類
其他分類可以擁有方法的類型和不能擁有方法的類型
可變類型(數(shù)字、布爾值、null、undifined、字符串)和不可變類型(對(duì)象、數(shù)組)
數(shù)字javascript采用IEEE 754標(biāo)準(zhǔn)定義的64位浮點(diǎn)格式表示數(shù)字,最大值±1.7976931348623157E+308,最小值±5E-324
能夠表示的整數(shù)范圍為-2E+53~2E+53。實(shí)際操作(如數(shù)組索引)是基于32位整數(shù)。
注意: 小數(shù)精度問題,如0.1+0.2 != 0.3 ,需要轉(zhuǎn)成整數(shù)計(jì)算,計(jì)算完成再轉(zhuǎn)回小數(shù)。產(chǎn)生原因是Number采用的時(shí)IEEE 754 64位雙精度浮點(diǎn)數(shù)編碼,浮點(diǎn)數(shù)無法精確表示其值范圍內(nèi)的所有數(shù)值,導(dǎo)致十進(jìn)制轉(zhuǎn)換成二進(jìn)制時(shí)有舍入模式,產(chǎn)生了誤差
格式整形直接量
浮點(diǎn)直接量
算術(shù)運(yùn)算上溢出(正負(fù)無窮)使用±Infinity表示,下溢出(無限接近于0)則返回0(±0)。
NaN和任何值都不相等,包括自身。
二進(jìn)制浮點(diǎn)數(shù)和四舍五入錯(cuò)誤在javascript使用實(shí)數(shù)時(shí),常常只是真實(shí)值的一個(gè)近似表示。
let x=0.3-0.2 let y=0.2-0.1 x==y // false x==0.1 // false y==0.1 // true // 由于舍入誤差,0.3和0.2之間的近似差值實(shí)際上不等于0.2和0.1之間的近似差值文本
字符串是一組由16位值組成的不可變的有序序列。字符串長(zhǎng)度是其所含的16位值的個(gè)數(shù)。
轉(zhuǎn)義字符 布爾值true或者false
可轉(zhuǎn)換為false的值:undefined、null、0、-0、NaN、""。
typeof null為object,含義為非對(duì)象
undifined 未定義值
全局對(duì)象全局屬性、全局函數(shù)、構(gòu)造函數(shù)、全局對(duì)象
包裝對(duì)象存取字符串、數(shù)字或布爾值的屬性時(shí)創(chuàng)建的臨時(shí)對(duì)象叫包裝對(duì)象。
可變類型(數(shù)字、布爾值、null、undifined、字符串)和不可變類型(對(duì)象/引用類型、數(shù)組)。
類型轉(zhuǎn)換 轉(zhuǎn)換和相等性 顯式類型轉(zhuǎn)換如果給一個(gè)未聲明的變量賦值(不可配置),實(shí)際上會(huì)給全局對(duì)象創(chuàng)建一個(gè)同名屬性(可配置),不建議這樣用。
創(chuàng)建一個(gè)全局變量實(shí)際上是給全局對(duì)象創(chuàng)建了一個(gè)屬性。
變量作用域一個(gè)變量的作用域是程序源代碼中定義這個(gè)變量的區(qū)域。
函數(shù)作用域、塊級(jí)作用域。
聲明提前
類型檢測(cè)typeof 用于基礎(chǔ)類型和函數(shù)判斷
instanceof用于對(duì)象類型判斷
Object.prototype.toString.apply([])==="[object Array]" null、undifined失效
表達(dá)式和運(yùn)算符 表達(dá)式表達(dá)式分為簡(jiǎn)單表達(dá)式(常量、變量名)和復(fù)雜表達(dá)式(由簡(jiǎn)單表達(dá)式組成)。
原始表達(dá):表達(dá)式的最小單位,
直接量(包括:數(shù)字、字符串、布爾,不包括數(shù)組、對(duì)象)
關(guān)鍵字
變量
由簡(jiǎn)單表達(dá)式可以組合成復(fù)合表達(dá)式
復(fù)雜表達(dá)式對(duì)象和數(shù)組的初始化表達(dá)式
函數(shù)定義表達(dá)式
屬性訪問表達(dá)式
調(diào)用表達(dá)式
對(duì)象創(chuàng)建表達(dá)式
運(yùn)算符說明:
下圖按照優(yōu)先級(jí)高到低排序,水平線分割的具有不同的優(yōu)先級(jí)
A列表示運(yùn)算符結(jié)核性,L(左到右) R(右至左)
N列表示操作數(shù)的個(gè)數(shù)
類型列表示期望的操作數(shù)類型以及運(yùn)算符的結(jié)果類型
按照操作數(shù)個(gè)數(shù)分:一元(+1)、二元(1+2)、三元(?:)
左值表達(dá)式只能出現(xiàn)在賦值運(yùn)算符的左側(cè)。變量、對(duì)象屬性、數(shù)組元素均是左值。
算術(shù)表達(dá)式作用于一個(gè)多帶帶的操作數(shù),并產(chǎn)生一個(gè)新值,具有很高的優(yōu)先級(jí),且均為右結(jié)合。
+:轉(zhuǎn)換為數(shù)字或者NaN,并返回轉(zhuǎn)換后的值
-:和+一樣,但是會(huì)改變結(jié)果的符號(hào)。
++和--:運(yùn)算符在操作數(shù)前,操作數(shù)±1并返回計(jì)算后的值;運(yùn)算符在操作數(shù)之后,操作數(shù)±1,并返回計(jì)算前的值。
,逗號(hào)運(yùn)算符,從左到右一次執(zhí)行,返回最右邊的值
關(guān)系表達(dá)式in
instanceof
邏輯表達(dá)式 賦值表達(dá)式 其他運(yùn)算符?:
typeof
delete
viod
,逗號(hào)運(yùn)算符,從左到右計(jì)算,最后返回最右邊的值
語句 聲明語句變量var let
函數(shù)function
條件語句 switchswitch(expression){ statements } // expression中計(jì)算是使用===循環(huán) do/while
do{ statements } while(expression) // 至少執(zhí)行一次for/in
// 將對(duì)象中的所有屬性復(fù)制到一個(gè)數(shù)組中 var o = {x:1,y:2,z:3}; var a = [], i = 0; for(a[i++] in o) /* empty */;跳轉(zhuǎn) 標(biāo)簽語句
mainloop: while(token I= null) { // 忽略這里的代碼... continue mainloop; //跳轉(zhuǎn)到下一次循環(huán) // 忽略這里的代碼... } //從標(biāo)簽名開始,以便在報(bào)錯(cuò)時(shí)退出程序 compute_sum: if (matrix) { for(var x = o; x < matrix.length; x++) { var row= matrix[x]; if (!row) break compute_sum; for(var y = o; y < row.length; y++) { var cell= row[y]; if (isNaN(cell)) break compute_sum; sum+= cell; } } success= true; } // break語句跳轉(zhuǎn)至此II如果在success== false的條件下到達(dá)這里, 說明我們給出的矩陣中有錯(cuò)誤//否則將矩陣中所有的元素進(jìn)行求和其他語句類型 width
// 臨時(shí)擴(kuò)展作用域鏈 with(document.form[0]){ name.value="" }try/catch
try{ xxxx }catch(e){ xxx }finally{ xxx }對(duì)象 創(chuàng)建對(duì)象
對(duì)象直接量創(chuàng)建的對(duì)象原型為Object.prototype
通過new創(chuàng)建的對(duì)象原型為使用的原構(gòu)造函數(shù)的prototype
Object.create()創(chuàng)建的對(duì)象原型為第一個(gè)參數(shù),也可設(shè)置為null
屬性的查詢和設(shè)置 屬性訪問錯(cuò)誤查詢屬性和原型有關(guān),設(shè)置與原型無關(guān)(如果設(shè)置屬性為繼承屬性,且具有setter方法時(shí),將執(zhí)行setter,而不是給當(dāng)前對(duì)象創(chuàng)建新的屬性)
下列情況給對(duì)象O設(shè)置屬性P會(huì)失敗
O中屬性P是只讀的(defineProperty()方法中有例外)
O中的P是繼承的,且是只讀的
O中不存在屬性P,O中沒有使用setter方法繼承屬性P,并且O的可擴(kuò)展性()是false
檢測(cè)屬性in:x in o
hasOwnProperty: O.hasOwnProperty(x)
propertyIsEnumerable: o.propertyIsEnumerable(x),hasOwnProperty的增強(qiáng)版,自身屬性且可枚舉
o.x!==undefined x的值為undefined則需要使用in
屬性的特性值 value
可寫性 writable
可枚舉性 enumerable
可配置性 configurable
Object.getOwnPropertyDescriptor({x:1},"x") // 返回{value:1,writable:true,enumerable:true,configurable:true}
// 單個(gè) Object.definePeoperty(o,"x",{ value:1, // 值 writable:true, // 可讀 enumerable:true, // 可遍歷 configurable:true // 可改變配置 }) // 批量 Object.definePeoperties(o,{ x:{ value:1, writable:true, enumerable:true, configurable:true }, y:{ value:1, writable:true, enumerable:true, configurable:true } })對(duì)象的三個(gè)屬性 原型
查詢?cè)?b>Object.getPrototypeOf()
檢測(cè)是否包含某個(gè)原型p.isPrototypeOf(o),p是否是o的原型
類屬性可以通過toString獲取對(duì)象的類屬性
function classof(o){ if(o===null) return "Null"; if(o===undefined) return "Undefined"; return Object.prototype.toString.call(o).slice(8,-1); } classof({}) // => "Object"可擴(kuò)展性
查詢可擴(kuò)展性 Object.isExtensible(o)
轉(zhuǎn)換成不可擴(kuò)展 Object.preventExtensions(o)
封閉:轉(zhuǎn)換為不可擴(kuò)展且所有屬性不可配置 Object.seal(),可使用Object.isSealed()來檢測(cè)是否封閉
凍結(jié):轉(zhuǎn)換為不可擴(kuò)展且所有屬性不可配置、所有屬性只讀 Object.freeze(),可以使用Object.isFrozen()來檢測(cè)是否凍結(jié)
序列化JSON.stringify(),JSON.parse()具可接受第二個(gè)參數(shù),標(biāo)識(shí)需要序列化或還原的屬性列表
對(duì)象方法toJSON()
valueOf()將對(duì)象轉(zhuǎn)換成原始值
數(shù)組 創(chuàng)建數(shù)組數(shù)組直接量[],該語法有可選的結(jié)尾逗號(hào),故[,,]只有兩個(gè)元素而非三個(gè)
new Array()
new Array() // 創(chuàng)建一個(gè)空數(shù)組 new Array(10) // 創(chuàng)建一個(gè)長(zhǎng)度為10的數(shù)組 new Array(5,4,3) // 創(chuàng)建一個(gè)已包含數(shù)組元素?cái)?shù)組稀疏數(shù)組
稀疏數(shù)組并不是項(xiàng)的值為undefined,而是不存在
// 三種方式創(chuàng)建 // 1 new Array(5) // 2 a=[] a[1000]=0 // 3 delete數(shù)組方法
*標(biāo)識(shí)為變異方法
join
reverse *
sort *
concat
slice
splice *,返回刪除元素組成的數(shù)組
push/unshift *,返回?cái)?shù)組新的長(zhǎng)度
pop/shift * 返回刪除元素的值
toString/toLocalString 無方括號(hào),逗號(hào)分隔
forEach
map
filter,可以使用來壓縮稀疏數(shù)組
every 所有元素調(diào)用判定函數(shù),均返回true才返回true
some 所有元素調(diào)用判定函數(shù),有一個(gè)返回true就返回true
reduce/reduceRight
// 求和、第二個(gè)參數(shù)為temp的初始值,不傳默認(rèn)使用數(shù)組中的第一個(gè)元素 arr.reduce((temp,value,index,arr)=>temp+value, 0)
indexOf/lastIndexOf
數(shù)組類型判斷使用Array.isArray(arr)判斷是否是數(shù)組
函數(shù)構(gòu)造函數(shù):用于初始化一個(gè)新創(chuàng)建的對(duì)象的函數(shù)
函數(shù)定義兩種定義方式及區(qū)別:
函數(shù)聲明語句,可以在定義前使用(函數(shù)聲明前置);不能出現(xiàn)在循環(huán)、條件、try/catch/finally、with中
函數(shù)定義表達(dá)式,不能在定義前使用(變量聲明前置);可以出現(xiàn)在任何地方
函數(shù)構(gòu)造器
函數(shù)調(diào)用四種調(diào)用方式:
作為函數(shù):this在非嚴(yán)格模式為全局對(duì)象,嚴(yán)格模式為undefined
作為方法:this為方法所屬對(duì)象
作為構(gòu)造函數(shù):this為新構(gòu)造的對(duì)象
call()或者apply()間接調(diào)用:this為指定的對(duì)象
函數(shù)的實(shí)參與形參不定實(shí)參函數(shù):可以接收任意個(gè)數(shù)的實(shí)參,通過arguments(類數(shù)組對(duì)象)接收參數(shù)
作為命名空間的函數(shù)立即調(diào)用函數(shù)
(function(){ }())閉包
詞法作用域,函數(shù)內(nèi)變量作用域是在函數(shù)定義時(shí)創(chuàng)建的,而不是在調(diào)用時(shí)創(chuàng)建,且在函數(shù)執(zhí)行時(shí),定義時(shí)的作用域鏈依然有效。
函數(shù)對(duì)象可以通過作用域鏈相互關(guān)聯(lián)起來,函數(shù)體內(nèi)部的變量都可以保存咋子函數(shù)作用域內(nèi),這種特性叫閉包。
apply 將函數(shù)作為指定對(duì)象thisObj的方法來調(diào)用,傳遞給它的是指定的參數(shù)數(shù)組args
function.apply(thisObj,args)
call 將函數(shù)作為指定對(duì)象thisObj的方法來調(diào)用,傳遞給它的是指定的參數(shù),如果thisObj為null,則為全局對(duì)象
function.call(thisObj,arg1,arg2,...)
bing 返回一個(gè)新函數(shù),通過可選的指定參數(shù),作為指定對(duì)象obj的方法調(diào)用該方法,傳遞給該函數(shù)的參數(shù)由兩部分組成,一部分是傳遞給bind()的args數(shù)組指定的參數(shù),剩下的是傳給這個(gè)新函數(shù)的所有值。
傳入bind()的實(shí)參都是放在傳入原始函數(shù)的實(shí)參列表開始的位置。
function.call(obj,arg1,arg2,...) // 示例: let g=f.bind(obj,1,2) g(3) // 等價(jià)于 f.call(obj,1,2,3)toString Function()構(gòu)造函數(shù),最后一個(gè)實(shí)參為函數(shù)體 函數(shù)式編程 高階函數(shù)
操作函數(shù)的函數(shù),接收一個(gè)或者多個(gè)函數(shù)作為參數(shù),并返回一個(gè)函數(shù)。
傳入bind()的實(shí)參都是放在傳入原始函數(shù)的實(shí)參列表開始的位置。
作用域 分類全局
函數(shù),塊級(jí)(ES6+)
eval
作用域鏈 變量對(duì)象用于存儲(chǔ)執(zhí)行上下文中的:
變量
函數(shù)聲明
函數(shù)參數(shù)
特性:封裝、繼承、多態(tài)、抽象
類名使用大駝峰命名。ES6直接使用class,下面是ES6之前的。
原型對(duì)象是類的唯一標(biāo)識(shí):當(dāng)切僅當(dāng)兩個(gè)對(duì)象繼承自同一個(gè)原型對(duì)象時(shí),它們才屬于同一個(gè)類的實(shí)例。
construsctor構(gòu)造函數(shù)是類的公共標(biāo)識(shí),construsctor屬性為對(duì)象提供了類。
let 0= new F() 0.construsctor===F // => truejavascript中的java式的類繼承
創(chuàng)建一個(gè)類分為三步:
定義一個(gè)構(gòu)造函數(shù),并設(shè)置初始化新對(duì)象的實(shí)例屬性
給構(gòu)造函數(shù)的prototype對(duì)象定義實(shí)例方法
給構(gòu)造函數(shù)定義類字段和類屬性
類的擴(kuò)充javascript中基于原型的繼承機(jī)制是動(dòng)態(tài)的,如果創(chuàng)建對(duì)象之后原型的屬性發(fā)生變化,也會(huì)影響到繼承這個(gè)原型的所有實(shí)例,即我們可以通過給原型對(duì)象添加方法來擴(kuò)充Javascript類。
類和類型obj instanceof c obj.isPrototypeOf(f)
x.constructor===Number
Object.prototype.toString.call(o)
注意:
前兩種方法在多個(gè)執(zhí)行上下文無效
這三種方法都有一個(gè)問題,就是不是所有對(duì)象都有constructor屬性
toString()
toLocaleString()
valueOf()
toJSON()
方法借用Object.prototype.xxx=xxx子類
方法鏈
構(gòu)造函數(shù)鏈
正則表達(dá)式的匹配模式 定義直接量
構(gòu)造器
內(nèi)容非貪婪重復(fù)在匹配字符后加一個(gè)?即可。
search
replace
match
split
RegExp對(duì)象source
global
ignoreCase
multiline
lastIndex
exec
test
javascript的子集和擴(kuò)展 迭代 迭代器Iterator(),返回迭代器
for(let [k,v] in Iterator({a:1,b:2})) console.log(k+"="+v) // a=1,b=2
特性:
只針對(duì)自有屬性進(jìn)行遍歷,忽略繼承屬性
第二個(gè)參數(shù)傳true,則只遍歷屬性名。忽略值
數(shù)組推導(dǎo)*[expression for (varuable in object) if(conditon)]函數(shù)簡(jiǎn)寫
表達(dá)式閉包:如果函數(shù)只計(jì)算一個(gè)表達(dá)式并返回它的值,關(guān)鍵字return和花括號(hào)可以省略
let succ=function(x)x+1多catch從句 E4X
jsx語法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/100895.html
摘要:原文第一章主要介紹的大概情況基本語法。通過和來引用對(duì)象屬性或數(shù)組元素的值就構(gòu)成一個(gè)表達(dá)式。 原文:https://keelii.github.io/2016/06/16/javascript-definitive-guide-note-0/ 第一章 主要介紹 JavaScript 的大概情況、基本語法。之前沒有 JavaScript 基礎(chǔ)的看不懂也沒關(guān)系,后續(xù)章節(jié)會(huì)有進(jìn)一步的詳細(xì)說明...
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡(jiǎn)單的頁面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡(jiǎn)單的頁面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
閱讀 853·2019-08-30 15:54
閱讀 3322·2019-08-29 15:33
閱讀 2707·2019-08-29 13:48
閱讀 1226·2019-08-26 18:26
閱讀 3339·2019-08-26 13:55
閱讀 1489·2019-08-26 10:45
閱讀 1173·2019-08-26 10:19
閱讀 312·2019-08-26 10:16