摘要:安全防范機制未聲明變量聲明未初始化變量使用來做安全防范機制可以預(yù)防報錯數(shù)組數(shù)組可以容納任何類型的值。因此與進行操作即可截取中的位數(shù)位。
安全防范機制
未聲明變量undeclared、聲明未初始化變量undefined
var a b typeof a //"undefined" typeof b //"undefined"
使用typeof來做安全防范機制可以預(yù)防報錯
if(typeof r !== "undefined"){ //do } else{ //do }數(shù)組
數(shù)組可以容納任何類型的值。
用delete刪除數(shù)組的某一項值后,數(shù)組長度不會改變
var a = [1,2,3] delete a[1] console.log(a.length) //3
創(chuàng)建“稀松”數(shù)組(含有空白或空缺的數(shù)組)后,其中空白單元值為undefined,與將其顯示賦值為undefined有區(qū)別
數(shù)組通過數(shù)字進行索引,但它也是對象,可以包含字符串鍵值和屬性,但是這些并不計算在數(shù)組長度內(nèi)
var c = [] c[0] = 1 c ["dd"] = 2 console.log(c.length) // 1
注意:如果字符串值能夠被強制轉(zhuǎn)換為十進制數(shù)字的話,它就可以被當作數(shù)字索引來處理
var d = [] b[0] = 1 b["13"] = 12 console.log(b) // [1, 13: 12]0: 1 13: 12length: 14類數(shù)組
將類數(shù)組轉(zhuǎn)化成真數(shù)組,使用數(shù)組工具函數(shù)indexOf() concat() forEach() slice().通過arguments對象將函數(shù)的參數(shù)當作列表來訪問在ES6中已廢棄
Array.form(arguemnts)實現(xiàn)返回參數(shù)列表的數(shù)組復(fù)本
js中字符串是不可變的,而(字符)數(shù)組是可變的。
字符串不變指的是字符串成員函數(shù)不會改變其原始值,而創(chuàng)建并返回一個新的字符串。而數(shù)組成員都是在其原始值上進行操作。
var m = "foo" var n = ["f","o","o"] m[1] = 1 n[1] = 1 console.log(m,n) // foo ["f", 1, "o"]
c = m.toUpperCase() m === c //false m //"foo" c //"FOO"
許多數(shù)組函數(shù)用來處理字符串很方便,雖然字符串沒有這些函數(shù),但可以通過“借用”數(shù)組的非變更方法來處理字符串
通常方法:
Array.prototype.join.call()
字符串反轉(zhuǎn):
不能通過Aarry.prototype.reverse.call()來“借用”可變更成員函數(shù)reverse()
簡單字符串反轉(zhuǎn)常用方法:
var c = "foo" c //將字符串轉(zhuǎn)成字符數(shù)組 .split("") .reverse() //將字符數(shù)組轉(zhuǎn)成字符串 .join("") //"o,o,f"數(shù)字
js沒有真正意義上的“整數(shù)”,js中數(shù)據(jù)類型基于IEEE754標準實現(xiàn)的,該標準通常也被稱為”浮點數(shù)“。
較小的數(shù)值怎樣來判斷0.1 + 0.2 == 0.3是否相等呢?
設(shè)置一個誤差范圍值,
ES6中定義Number.EPSILON
為ES6寫的polyfill
if(!Number.EPSILON){ Number.EPSILON = Math.pow(2,-52) }
可以使用Number.EPSILON來比較兩個數(shù)字是否相等(即在指定誤差內(nèi))
檢查一個數(shù)是否為整數(shù)ES6:Number.isInterger
polyfill
if(!Number.isInteger){ Number.ismteger = function(num){ return typeof num == "number" && num % 1 == 0 } }檢查是否為一個安全的整數(shù)
polyfill
if(!Number.isSafeInteger){ Number.isSafeInteger = function)(num){ return Number.isInteger(num) && Math.abs(num) <= Num.MAX_SAFE_INTEGER } }32位有符號整數(shù)
整數(shù)最大能夠達到53位,有些數(shù)字操作適用32位數(shù)字。
a | 0可以將變量轉(zhuǎn)換成32位有符號的整數(shù),因為整數(shù)運算符|只適用32位整數(shù)。因此與0進行操作即可截取a中的32位數(shù)位。
undefined null:既是類型也是值
null 空值,特殊關(guān)鍵字,指曾賦過值,但是目前沒有值
undefined 標志符,沒有值,未賦值
不是數(shù)字的數(shù)字(無法解析為常規(guī)十進制/十六進制)
var a = 2/"foo" //NaN typeof a //"number"
自反的值 NaN !== NaN
isNaN():檢查參數(shù)是否不是NaN,也不是數(shù)字
var a = 2/"foo" var b = "foo" window.isNaN(b) //true window.isNaN(a) //true
ES6:Number.isNaN
polyfill:
if(!Number.isNaN){ Number.isNaN = function(num){ return num !== num } }無窮數(shù)
var a = -1 / 0 //-Infinity var b = 1 / 0 //Infinity var c = 1 / Infinity //0 var d = -1 / Infinity //-0 var e = Infinity / Infinity // NaN零值
0和-0
var a = 0 / -3 //-0 var b = 0 * -3 //-0
加法和減法運算得不到-0
要區(qū)分0和-0
function isNegZero (n) { n = Number(n) return (n===0) && (1/n === -Infinity) }特殊等式
ES6: Object.is(..)
polyfill
if(!Object.is){ Object.is = function (v1,v2) { if(v1 === 0 && v2 === 0 ){ return 1 / v1 === 1 / v2 } if(v1 !== v1){ return v2 !== v2 } return v1 === v2 } }
PS:數(shù)值考慮NaN 與 0 -0
值和引用js對值和引用的賦值在語法上沒有區(qū)別,完全根據(jù)值的類型
值復(fù)制:標量基本類型的值是不可更改的
null / undefined
字符串
數(shù)字 new Number()
boolean
symbol
引用復(fù)制:同時指向一個值,更改的也是同一個值
對象(數(shù)組和封裝對象)
函數(shù)
如果通過值復(fù)制來傳遞復(fù)合值,就需要為其創(chuàng)建一個復(fù)本,這樣傳遞的就不是原始值foo(a.slice())
相反,如果將標量基本類型值傳遞到函數(shù)并進行更改,就需要將該值封裝到一個復(fù)合值中,然后通過引用復(fù)制進行傳遞
function foo(wrapper){ wrapper.a = 42 } var obj = { a : 2 } foo(obj) obj.a //42
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86709.html
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
摘要:申明變量變量名以分號結(jié)束。如果一定要使用點的話,需要改變成駝峰式命名法。基礎(chǔ)篇練習(xí)看完以上的小伙伴,可以看兩個例子的效果,試著做一下。練習(xí)一點擊按鈕,設(shè)置方塊大小練習(xí)二點擊按鈕,增加或減小字體大小 1.JS存放在代碼中的位置 1.JS寫在行間 hello world 優(yōu)點:直接,簡單 缺點:不方便復(fù)用和維護,不符合結(jié)構(gòu)行為分離規(guī)范 2.JS寫在script ( 一般寫在body...
摘要:申明變量變量名以分號結(jié)束。如果一定要使用點的話,需要改變成駝峰式命名法。基礎(chǔ)篇練習(xí)看完以上的小伙伴,可以看兩個例子的效果,試著做一下。練習(xí)一點擊按鈕,設(shè)置方塊大小練習(xí)二點擊按鈕,增加或減小字體大小 1.JS存放在代碼中的位置 1.JS寫在行間 hello world 優(yōu)點:直接,簡單 缺點:不方便復(fù)用和維護,不符合結(jié)構(gòu)行為分離規(guī)范 2.JS寫在script ( 一般寫在body...
摘要:申明變量變量名以分號結(jié)束。如果一定要使用點的話,需要改變成駝峰式命名法。基礎(chǔ)篇練習(xí)看完以上的小伙伴,可以看兩個例子的效果,試著做一下。練習(xí)一點擊按鈕,設(shè)置方塊大小練習(xí)二點擊按鈕,增加或減小字體大小 1.JS存放在代碼中的位置 1.JS寫在行間 hello world 優(yōu)點:直接,簡單 缺點:不方便復(fù)用和維護,不符合結(jié)構(gòu)行為分離規(guī)范 2.JS寫在script ( 一般寫在body...
摘要:使用,程序員還可以用它來判斷某個節(jié)點是否被賦予了某個類。現(xiàn)在是增加現(xiàn)在是刪除是否存在類檢查是否含有某個類結(jié)果是或者。屬性返回類列表中類的數(shù)量。查看元素有多少個類名獲取獲取元素的所有類名返回類名在元素中的索引值。 頁面DOM里的每個節(jié)點上都有一個classList對象,程序員可以使用里面的方法新增、刪除、修改節(jié)點上的CSS類。使用classList,程序員還可以用它來判斷某個節(jié)點是否被賦...
閱讀 2485·2021-11-24 09:39
閱讀 3528·2019-08-30 15:53
閱讀 602·2019-08-29 15:15
閱讀 2909·2019-08-26 13:23
閱讀 3224·2019-08-26 10:48
閱讀 650·2019-08-26 10:31
閱讀 776·2019-08-26 10:30
閱讀 2370·2019-08-23 18:32