电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

JavaScript初學(xué)者容易犯的幾個錯誤

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

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

混淆 undefined 和 null

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

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

返回undefined的函數(shù):

const f = () => {}

設(shè)置變量的值為undefined:

x = undefined;

判斷屬性是否為undefined:

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

判斷變量是否為undefined:

typeof x === ’undefined’

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

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

obj.prop === nullx === null

使用typeof是無法判斷null的,因?yàn)樗菍ο箢愋汀?/p>混淆數(shù)字相加和字符串拼接

在 JavaScript 中,加號+操作符既可用于數(shù)字相加,也可以用于字符串拼接。由于 JavaScript 是動態(tài)語言,操作符會自動將變量轉(zhuǎn)成相同數(shù)據(jù)類型再運(yùn)算。比如:

let x = 1 + 1; // 2

結(jié)果是 2,是我們期望的數(shù)字相加操作,因?yàn)閮蓚€值都是數(shù)字。

但是,如果是下面這種表達(dá)式:

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

結(jié)果是’11’,因?yàn)榈谝粋€數(shù)字會轉(zhuǎn)換成字符串。這里的加號+運(yùn)算符被用作字符串拼接,而不是數(shù)字相加。這里能直接看到表達(dá)式的值還算清楚,如果是由多個變量組成的表達(dá)式就很難判斷類型了。

為了解決這個問題,我們可以把字符串都轉(zhuǎn)成數(shù)字類型,再進(jìn)行運(yùn)算。例如:

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

這樣,運(yùn)行結(jié)果就是3了。Number函數(shù)接收任意類型的值,如果能轉(zhuǎn)成數(shù)字就返回?cái)?shù)字,否則返回NaN。還可以用new Number(...).valueOf()函數(shù):

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

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

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

變量前面的 + 作用是將它轉(zhuǎn)換成數(shù)字,或者NaN,跟Number函數(shù)的作用相同。

return 語句換行問題

JavaScript 語法規(guī)定換行代表語句結(jié)束。例如:

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

本以為會返回 3,實(shí)際上是undefined。這是因?yàn)樵赼 + b之前,函數(shù)已經(jīng)執(zhí)行了return。要解決這個問題,有兩個做法:要么把表達(dá)式跟return放在一行,要么把表達(dá)式套一層括號。

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

加括號為什么可以換行呢?因?yàn)槔ㄌ柪锏氖潜磉_(dá)式,不是語句。表達(dá)式可以拆成多行,如果很長的話。用箭頭函數(shù)會更直觀:

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

箭頭函數(shù)里的單行表達(dá)式自帶return效果,當(dāng)然也可以在表達(dá)式外面套一層括號:

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

這個括號在返回對象字面量的箭頭函數(shù)里有點(diǎn)用處,因?yàn)椴患訄A括號()的話,{}只是函數(shù)體的開始和結(jié)束標(biāo)記,要返回對象字面量,還要顯式return {...}。

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

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

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

用 return 跳出 forEach 循環(huán)

JavaScript 數(shù)組有個 forEach 方法,用于對數(shù)組元素進(jìn)行循環(huán)操作。初學(xué)者很容易聯(lián)想到 for循環(huán)的break或continue關(guān)鍵字,用來中止循環(huán)。但是對不起,forEach沒有這兩個關(guān)鍵字。那用return行不行?可以用,但它的作用就是提前返回函數(shù),跟continue的效果類似,用于結(jié)束本次循環(huán)。要跳出整個循環(huán),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

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

總結(jié)

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

以上就是JavaScript初學(xué)者容易犯的幾個錯誤的詳細(xì)內(nèi)容,更多關(guān)于JS的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 不发火防静电金属骨料_无机磨石_水泥自流平_修补砂浆厂家「圣威特」 | 医院专用门厂家报价-医用病房门尺寸大全-抗菌木门品牌推荐 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 合同书格式和范文_合同书样本模板_电子版合同,找范文吧 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器 | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 食安观察网| 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 珠海冷却塔降噪维修_冷却塔改造报价_凉水塔风机维修厂家- 广东康明节能空调有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 雪花制冰机(实验室雪花制冰机)百科 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | 设计圈 - 让设计更有价值!| 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 珠海白蚁防治_珠海灭鼠_珠海杀虫灭鼠_珠海灭蟑螂_珠海酒店消杀_珠海工厂杀虫灭鼠_立净虫控防治服务有限公司 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 江苏大隆凯科技有限公司| 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 解放卡车|出口|济南重汽|报价大全|山东三维商贸有限公司 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 |