JavaScript編程中容易出BUG的幾點(diǎn)小知識(shí)
JavaScript是如今最受歡迎的編程語(yǔ)言之一,但受歡迎同時(shí)就是該語(yǔ)言自身的各種特性帶來(lái)的副作用,無(wú)論該語(yǔ)言多美妙,每天還是有成千上萬(wàn)的程序員弄出一堆bug。先不要嘲笑別人,或許你也是其中之一。
給你一個(gè)例子,下面是幾個(gè)簡(jiǎn)短的完全有效的JS片段(你可以在你的控制臺(tái)上試驗(yàn)一下):
typeof NaN === 'number' // true
Infinity === 1/0 // true
0.1 + 0.2 === 0.3 // false,前面加括號(hào)也一樣
"3" + 1 // '31'
"3" - 1 // 2
你還相信自己的JavaScript嗎?
1、JS最小的值
Number.MIN_VALUE > 0; //true
Number.MIN_VALUE用于JavaScript可以表達(dá)的最小值,為5e-324,然而是JS中最接近0的一個(gè)數(shù)
2、字符串連接
("foo" + + "bar") === "fooNaN" //true
"why I am " + typeof + "" // why I am number
JS解析成“foo” + (+ “bar”), 這將會(huì)把 “bar” 轉(zhuǎn)成一個(gè)數(shù)字
3、parseInt 函數(shù)
parseInt('06'); // 6
parseInt('08'); // 0 注意,谷歌新版已修正
parseInt(null, 24) === 23 // true
4、null是不是object
typeof null // object
null instanceof Object // false
5、return返回內(nèi)容
function myjson()
{
return
[
2
]
}
myjson(); // undefined
return返回的內(nèi)容必須和return在同一行
6、奇怪的數(shù)字
012 == 12 // false
'012' == 12 // true
"3" + 1 // '31'
"3" - 1 // 2
0.1 + 0.2 == 0.3 // false
0.1 + 0.7 == 0.8 // false
0.2 + 0.7 == 0.9 // false
9999999999999999 // 10000000000000000
9999999999999999-1 //10000000000000000
111111111111111111111 // 111111111111111110000
7、詭異的參數(shù)
function hello(what) {
alert(arguments[0]); //vicky
what = "world";
return "Hello, " + arguments[0] + "!";
}
hello("vicky"); //"Hello, world!"
8、讓人頭大的等號(hào)
NaN === NaN; // false
[] == false; // true
"" == false; // true
null == false; // false
[] == ![] // true
window.window == window // true
window.window === window // false,有些瀏覽器是true
window == document // true,有些瀏覽器是false
("0" && {}) == 0 // false
(0 && {}) == 0 // true
0 == "0" // true
[] == 0 // true
相關(guān)文章
淺談TypeScript的類(lèi)型保護(hù)機(jī)制
這篇文章主要介紹了淺談TypeScript的類(lèi)型保護(hù)機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02JS中的提升機(jī)制變量提升函數(shù)提升實(shí)例詳解
這篇文章主要為大家介紹了JS中的提升機(jī)制變量提升函數(shù)提升實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09echartjs實(shí)現(xiàn)cross十星輔助線實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了echartjs實(shí)現(xiàn)cross十星輔助線實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12如何通過(guò)setTimeout理解JS運(yùn)行機(jī)制詳解
這篇文章主要給大家介紹了關(guān)于如何通過(guò)setTimeout理解JS運(yùn)行機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03百度判斷手機(jī)終端并自動(dòng)跳轉(zhuǎn)js代碼及使用實(shí)例
這篇文章主要介紹了百度判斷手機(jī)終端并自動(dòng)跳轉(zhuǎn)js代碼及使用實(shí)例,需要的朋友可以參考下2014-06-06javascript中callee與caller的區(qū)別分析
有些小伙伴可能會(huì)問(wèn)caller,callee 是什么?在javascript 中有什么樣的作用?那么本篇會(huì)對(duì)于此做一些基本介紹。希望能夠?qū)Υ蠹依斫鈐avascript中的callee與caller有所幫助。2015-04-04使用javascript實(shí)現(xiàn)一個(gè)在線RGB顏色轉(zhuǎn)換器
目前已經(jīng)有很多網(wǎng)頁(yè)版在線小工具,之前很多窗體化的工具也逐漸網(wǎng)頁(yè)化,比如:PS畫(huà)圖軟件,也都能直接網(wǎng)頁(yè)化進(jìn)行設(shè)計(jì),由于自己實(shí)際項(xiàng)目經(jīng)常會(huì)用到顏色轉(zhuǎn)換,所以直接自己開(kāi)發(fā)個(gè)簡(jiǎn)單版的在線顏色轉(zhuǎn)換小工具,需要的朋友可以參考下2024-01-01