成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

JavaScript初學者容易犯的幾個錯誤

瀏覽:2日期:2023-06-04 11:57:51
前言

拋開 JavaScript 語言設計層面的問題不說,畢竟它是 Brendan Eich 當年用短短十天時間設計出來的,有點缺陷也是在所難免。作為開發者,我們該怎樣避免一些常見的低級錯誤呢?本文就列舉幾個常見錯誤,看看你有沒有似曾相識。

混淆 undefined 和 null

JavaScript 中的undefined和null都可用來表示沒有值,但是二者之間有所區別。undefined字面意思是“未定義”,但它的含義其實已經超出了變量未定義的范疇:嘗試讀取對象不存在的屬性、沒有return語句的函數的返回值、聲明后沒有賦值的變量甚至顯式賦值為undefined的變量等,它們的結果都是undefined。用typeof測試它的類型,是字符串’undefined’。而null就比較純粹了,變量只有設置為null才有這個值。另外,null是對象類型,即typeof(null)的值是字符串’object’。

需要注意的是,用if判斷這兩個值都是false,而且null==undefined是成立的,這一點初學者通常容易搞混。因此,盡量統一把“沒有值”都設置為undefined,這樣就省去了判斷區分的麻煩。

返回undefined的函數:

const f = () => {}

設置變量的值為undefined:

x = undefined;

判斷屬性是否為undefined:

typeof obj.prop === ’undefined’obj.prop === undefined

判斷變量是否為undefined:

typeof x === ’undefined’

變量聲明后沒有賦值,自動就有了undefined值。

如果一定要判斷null,用全等判斷:

obj.prop === nullx === null

使用typeof是無法判斷null的,因為它是對象類型。

混淆數字相加和字符串拼接

在 JavaScript 中,加號+操作符既可用于數字相加,也可以用于字符串拼接。由于 JavaScript 是動態語言,操作符會自動將變量轉成相同數據類型再運算。比如:

let x = 1 + 1; // 2

結果是 2,是我們期望的數字相加操作,因為兩個值都是數字。

但是,如果是下面這種表達式:

let x = 1 + ’1’; // “11”

結果是’11’,因為第一個數字會轉換成字符串。這里的加號+運算符被用作字符串拼接,而不是數字相加。這里能直接看到表達式的值還算清楚,如果是由多個變量組成的表達式就很難判斷類型了。

為了解決這個問題,我們可以把字符串都轉成數字類型,再進行運算。例如:

let x = 1; let y = ’2’; let z = Number(x) + Number(y);

這樣,運行結果就是3了。Number函數接收任意類型的值,如果能轉成數字就返回數字,否則返回NaN。還可以用new Number(...).valueOf()函數:

let x = 1; let y = ’2’; let z = new Number(x).valueOf() + new Number(y).valueOf();

由于new Number(...)是實例化一個構造函數,返回的是一個對象,并不是數字類型。如果要得到原始的數字類型,需要用該對象的valueOf方法。其實還有個更簡潔的方法:

let x = 1; let y = ’2’; let z = +x + +y;

變量前面的 + 作用是將它轉換成數字,或者NaN,跟Number函數的作用相同。

return 語句換行問題

JavaScript 語法規定換行代表語句結束。例如:

const add = (a, b) => { return a + b; }add(1,2); // undefined

本以為會返回 3,實際上是undefined。這是因為在a + b之前,函數已經執行了return。要解決這個問題,有兩個做法:要么把表達式跟return放在一行,要么把表達式套一層括號。

const add = (a, b) => { return a + b; }// 或者const add = (a, b) => { return ( a + b ); }

加括號為什么可以換行呢?因為括號里的是表達式,不是語句。表達式可以拆成多行,如果很長的話。用箭頭函數會更直觀:

const add = (a, b) => a + b

箭頭函數里的單行表達式自帶return效果,當然也可以在表達式外面套一層括號:

const add = (a, b) => (a + b)

這個括號在返回對象字面量的箭頭函數里有點用處,因為不加圓括號()的話,{}只是函數體的開始和結束標記,要返回對象字面量,還要顯式return {...}。

如果某行代碼中的語句不完整,JavaScript 解析器會將下一行的語句合并一起解析。比如:

const power = (a) => { const power = 10; return a ** 10; }// 等同于:const power = (a) => { const power = 10; return a ** 10; }

但是對于完整的語句,比如return,就不會合并多行。

用 return 跳出 forEach 循環

JavaScript 數組有個 forEach 方法,用于對數組元素進行循環操作。初學者很容易聯想到 for循環的break或continue關鍵字,用來中止循環。但是對不起,forEach沒有這兩個關鍵字。那用return行不行?可以用,但它的作用就是提前返回函數,跟continue的效果類似,用于結束本次循環。要跳出整個循環,return做不到。

const nums = [1, 2, 3, 4, 5, 6];let firstEven;nums.forEach(n => { if (n % 2 ===0 ) { firstEven = n; return n; }});console.log(firstEven); // 6

代碼本意是想找出第一個偶數,找到就退出循環。但實際并沒有退出循環,因此最終結果是最后一個偶數。有解決辦法嗎?這種情況可以用for循環,或者用數組filter、find之類的方法。

總結

雖然 JavaScript 很容易上手,但稍不注意還是比較容易犯錯。本文簡單介紹了幾種容易犯的錯,希望對你有所幫助。

以上就是JavaScript初學者容易犯的幾個錯誤的詳細內容,更多關于JS的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲精品国产无天堂网2021 | 在线观看亚洲一区| 中文字幕乱码日本亚洲一区二区| 国产成人av福利| 亚洲女与黑人做爰| 午夜精品视频在线观看| 久久国产综合精品| 亚洲综合色婷婷| 成人app软件下载大全免费| 91九色02白丝porn| 青青草国产成人99久久| 色国产精品一区在线观看| 日日摸夜夜添夜夜添亚洲女人| 久久精品日产第一区二区三区| 五月综合激情婷婷六月色窝| 翔田千里一区二区| 天堂在线亚洲视频| 一本大道av伊人久久综合| 日韩av网站免费在线| 国产精品手机视频| 伊人一区二区三区| 久久xxxx| 卡一卡二国产精品| 欧美一区二区三区影视| 成人黄色综合网站| 国产欧美一区二区精品性| 午夜久久美女| 中文字幕在线播放不卡一区| 亚洲高清视频在线观看| 悠悠色在线精品| 久久亚洲高清| 精品系列免费在线观看| 欧美日韩国产综合一区二区三区 | 日韩一区国产二区欧美三区| 国产成人三级在线观看| 日韩精品资源二区在线| 农村妇女精品| 亚洲三级视频在线观看| 国产伦精品一区二区三区四区免费 | 2020国产精品自拍| 欧美日韩综合网| 亚洲国产精品国自产拍av| 9久re热视频在线精品| 午夜电影网一区| 欧美高清视频一二三区| 成人午夜看片网址| 中文字幕 久热精品 视频在线 | 国产亚洲欧美一区二区| 日日噜噜夜夜狠狠视频欧美人| 欧洲一区在线观看| 成人免费不卡视频| 国产视频亚洲色图| 中文一区在线| 麻豆91在线观看| 精品福利一二区| 悠悠资源网久久精品| 午夜久久久久久久久| 欧美精品v国产精品v日韩精品| av一区二区不卡| 国产精品私人影院| 香蕉成人久久| 国产91在线观看丝袜| 精品99一区二区三区| 久久久久成人黄色影片| 亚洲免费在线视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美日精品一区视频| 欧美精品丝袜中出| 国产日韩精品久久久| 亚洲蜜臀av乱码久久精品蜜桃| 性欧美大战久久久久久久久| 久久国产欧美日韩精品| 国产在线精品一区二区三区不卡 | 欧美自拍偷拍午夜视频| 26uuu精品一区二区三区四区在线| 国产精品色哟哟网站| 亚洲一区二区三区四区五区黄| 日韩成人av影视| 国产91精品精华液一区二区三区| 欧美精选在线| 欧美性受xxxx黑人xyx性爽| 亚洲精品在线三区| 亚洲国产中文字幕在线视频综合 | 色综合久久99| 国产亚洲精品aa午夜观看| 亚洲成av人影院| 成人av综合一区| 一本色道**综合亚洲精品蜜桃冫| 欧美大片拔萝卜| 亚洲成av人片一区二区三区| 国产一区二区不卡在线| 亚洲人成免费| 精品国产伦一区二区三区免费| 亚洲综合色婷婷| 91视频xxxx| 欧美日产在线观看| 一区二区三区欧美| 国产91在线观看丝袜| 亚洲毛片在线| 精品久久久网站| 天堂成人国产精品一区| 国产一区二区中文| 日韩精品一区国产麻豆| www.亚洲在线| 国产精品你懂的在线| 久久精品女人天堂| 免费成人av在线| 中文高清一区| www.一区二区| 日韩一级片在线播放| 久久国产乱子精品免费女| 欧美一区二区三区免费视频| 在线观看福利一区| 成人免费电影视频| 麻豆精品久久久| 亚洲天堂网中文字| jizzjizzjizz欧美| 7777精品伊人久久久大香线蕉的| 欧美经典一区二区| 亚洲地区一二三色| 日本视频一区二区三区| 色综合久久综合| 欧美精品第1页| 久久久水蜜桃| 91精品国产色综合久久ai换脸 | 亚洲经典一区| 欧美一区二区福利在线| 国产精品久久久久桃色tv| 国产精品三上| 日韩欧美专区在线| 国产真实乱偷精品视频免| 亚洲成人原创| 亚洲国产精品99久久久久久久久| 国产一区二区三区免费看 | 午夜国产精品视频| 91精品国产色综合久久| 国产一区欧美日韩| 欧美日韩国产一二三| 精品一区二区三区免费播放| 欧美综合色免费| 久久99精品久久只有精品| 777午夜精品免费视频| 成人高清av在线| 欧美国产日本视频| 伊人精品在线| 亚洲一区二区五区| 久久久久国内| 九一九一国产精品| 欧美一级黄色录像| 国产99精品在线观看| 久久久久久久综合| 极品av少妇一区二区| 亚洲精品久久嫩草网站秘色| 嫩草成人www欧美| 男人操女人的视频在线观看欧美| 欧美日韩一区成人| 99久久99久久久精品齐齐| 国产欧美一区二区精品性色| 欧美久久影院| 亚洲国产中文字幕| 欧美日韩一区精品| gogo大胆日本视频一区| 中文字幕亚洲在| 亚洲免费影院| 六月丁香婷婷色狠狠久久| 欧美日韩不卡一区二区| 成人午夜又粗又硬又大| 一区免费观看视频| 色哟哟国产精品免费观看| 国产一区久久久| 国产精品久久久久久久第一福利 | 国产精品99久久久久久似苏梦涵 | 看片的网站亚洲| 日韩高清不卡一区二区三区| 奇米综合一区二区三区精品视频| 亚洲一区二区偷拍精品| 午夜精品福利一区二区三区av| 亚洲国产精品久久人人爱| 一区二区三区高清在线| 亚洲成人综合网站| 日日噜噜夜夜狠狠视频欧美人| 石原莉奈一区二区三区在线观看| 亚洲超碰97人人做人人爱| 亚洲成a人v欧美综合天堂 | 国产精品无码永久免费888| www国产成人免费观看视频 深夜成人网| 日韩欧美精品三级| 欧美成人精精品一区二区频| 日韩免费视频线观看| 精品国产三级电影在线观看| 久久综合久久久久88| 中文字幕av一区二区三区高| 一区二区中文视频| 亚洲亚洲人成综合网络| 亚洲一区二区在线免费观看视频| 亚洲自拍偷拍av| 香蕉久久一区二区不卡无毒影院 | 成人福利在线看| 91视频观看视频| 亚洲国产欧美不卡在线观看|