国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

詳解JavaScript的BUG和錯(cuò)誤

2024-05-06 15:34:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

計(jì)算機(jī)程序中的缺陷通常稱為 bug。 它讓程序員覺(jué)得很好,將它們想象成小事,只是碰巧進(jìn)入我們的作品。 實(shí)際上,當(dāng)然,我們自己把它們放在了那里。

如果一個(gè)程序是思想的結(jié)晶,你可以粗略地將錯(cuò)誤分為因?yàn)樗枷牖靵y引起的錯(cuò)誤,以及思想轉(zhuǎn)換為代碼時(shí)引入的錯(cuò)誤。 前者通常比后者更難診斷和修復(fù)。

語(yǔ)言

計(jì)算機(jī)能夠自動(dòng)地向我們指出許多錯(cuò)誤,如果它足夠了解我們正在嘗試做什么。 但是這里 JavaScript 的寬松是一個(gè)障礙。 它的綁定和屬性概念很模糊,在實(shí)際運(yùn)行程序之前很少會(huì)發(fā)現(xiàn)拼寫(xiě)錯(cuò)誤。 即使這樣,它也允許你做一些不會(huì)報(bào)錯(cuò)的無(wú)意義的事情,比如計(jì)算true *'monkey'。

JavaScript 有一些報(bào)錯(cuò)的事情。 編寫(xiě)不符合語(yǔ)言語(yǔ)法的程序會(huì)立即使計(jì)算機(jī)報(bào)錯(cuò)。 其他的東西,比如調(diào)用不是函數(shù)的東西,或者在未定義的值上查找屬性,會(huì)導(dǎo)致在程序嘗試執(zhí)行操作時(shí)報(bào)告錯(cuò)誤。

不過(guò),JavaScript 在處理無(wú)意義的計(jì)算時(shí),會(huì)僅僅返回NaN(表示不是數(shù)字)或undefined這樣的結(jié)果。程序會(huì)認(rèn)為其執(zhí)行的代碼毫無(wú)問(wèn)題并順利運(yùn)行下去,要等到隨后的運(yùn)行過(guò)程中才會(huì)出現(xiàn)問(wèn)題,而此時(shí)已經(jīng)有許多函數(shù)使用了這個(gè)無(wú)意義的值。程序執(zhí)行中也可能不會(huì)遇到任何錯(cuò)誤,只會(huì)產(chǎn)生錯(cuò)誤的程序輸出。找出這類錯(cuò)誤的源頭是非常困難的。

我們將查找程序中的錯(cuò)誤或者 bug 的過(guò)程稱為調(diào)試(debug)。

嚴(yán)格模式

當(dāng)啟用了嚴(yán)格模式(strict mode)后,JavaScript 就會(huì)在執(zhí)行代碼時(shí)變得更為嚴(yán)格。我們只需在文件或函數(shù)體頂部放置字符串"use strict"就可以啟用嚴(yán)格模式了。下面是示例代碼:

function canYouSpotTheProblem() { "use strict"; for (counter = 0; counter < 10; counter++) { console.log("Happy happy"); }}canYouSpotTheProblem();// → ReferenceError: counter is not defined

通常,當(dāng)你忘記在綁定前面放置let時(shí),就像在示例中的counter一樣,JavaScript 靜靜地創(chuàng)建一個(gè)全局綁定并使用它。 在嚴(yán)格模式下,它會(huì)報(bào)告錯(cuò)誤。 這非常有幫助。 但是,應(yīng)該指出的是,當(dāng)綁定已經(jīng)作為全局綁定存在時(shí),這是行不通的。 在這種情況下,循環(huán)仍然會(huì)悄悄地覆蓋綁定的值。

嚴(yán)格模式中的另一個(gè)變化是,在未被作為方法而調(diào)用的函數(shù)中,this綁定持有值undefined。 當(dāng)在嚴(yán)格模式之外進(jìn)行這樣的調(diào)用時(shí),this引用全局作用域?qū)ο螅搶?duì)象的屬性是全局綁定。 因此,如果你在嚴(yán)格模式下不小心錯(cuò)誤地調(diào)用方法或構(gòu)造器,JavaScript 會(huì)在嘗試從this讀取某些內(nèi)容時(shí)產(chǎn)生錯(cuò)誤,而不是愉快地寫(xiě)入全局作用域。

例如,考慮下面的代碼,該代碼不帶new關(guān)鍵字調(diào)用構(gòu)造器,以便其this不會(huì)引用新構(gòu)造的對(duì)象:

function Person(name) { this.name = name; }let ferdinand = Person("Ferdinand"); // oopsconsole.log(name);// → Ferdinand            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 民县| 股票| 南溪县| 嘉定区| 平邑县| 渑池县| 公安县| 宁乡县| 万山特区| 历史| 衡山县| 叙永县| 旅游| 桦甸市| 班玛县| 滦南县| 吉安县| 巴马| 饶阳县| 太仆寺旗| 平安县| 前郭尔| 石家庄市| 远安县| 辽阳市| 渭南市| 钟祥市| 牟定县| 临夏县| 城固县| 澄江县| 通州区| 盐城市| 宁武县| 合肥市| 彝良县| 交城县| 广南县| 新竹县| 横峰县| 湾仔区|