目錄
1. 你有沒有嘗試給一組數字排序?
2. new Date() 很棒
3. Replace 不「取代」
4. 比較的時候要注意
5. 陣列不是原始資料型別
閉包" >#6. 閉包
7.談到 bind
總結
首頁 web前端 js教程 js初學者該知道的技巧和陷阱

js初學者該知道的技巧和陷阱

Jun 21, 2017 am 09:39 AM
javascript js 簡單

這裡有一些 Javascript初學者應該知道的技巧和陷阱。如果你已經是專家了,順便溫習一下。

Javascript也只不過是一種程式語言。怎麼可能出錯嘛?

1. 你有沒有嘗試給一組數字排序?

Javascript 的sort()函數在預設情況下使用字母數字(字串Unicode碼點)排序。

所以[1,2,5,10].sort() 會輸出 [1, 10, 2, 5].

#要正確的排序一個陣列, 你可以用 [1,2,5,10].sort((a, b) => a — b)

#很簡單的解決方案, 前提是你得知道有這麼個坑

2. new Date() 很棒

new Date() 可以接受:

  • #沒有參數: 傳回目前時間

  • 一個參數 x: 回傳1970年1月1日+ x 毫秒。 了解 Unix 的人知道為什麼。

  • new Date(1, 1, 1) 回傳 1901, 二月 , 1號\。因為,第一個參數表示1900年加1年,第二個參數表示這一年的第二個月(因此是二月) — 腦迴路正常的人會從1開始索引 — ,第三個參數很很明顯是這個月的第一天,所以1 — 有時候索引確實從1開始 — 。

  • new Date(2016, 1, 1) 不會給1900年加上2016。它僅代表2016年。

3. Replace 不「取代」

let s = "bob"const replaced = s.replace('b', 'l')
replaced === "lob"
s === "bob"
登入後複製

我覺得這是一件好事,因為我不喜歡函數改變它們的輸入。 你也應該知道 replace 只會替換第一個符合的字串:

如果你想取代所有符合的字串,你可以使用帶/g標誌的正規表示式:

"bob".replace(/b/g, 'l') === 'lol' // 替换所有匹配的字符串
登入後複製

4. 比較的時候要注意

// These are ok'abc' === 'abc' // true1 === 1         // true// These are not
[1,2,3] === [1,2,3] // false
{a: 1} === {a: 1}   // false
{} === {}           // false
登入後複製

原因:[1,2,3]和[1,2,3]是兩個獨立的陣列。它們只是恰好包含相同的值。它們有不同的引用,無法用===來比較。

5. 陣列不是原始資料型別

typeof {} === 'object'  // truetypeof 'a' === 'string' // truetypeof 1 === number     // true// But....typeof [] === 'object'  // true
登入後複製

如果你想知道你的變數是不是數組,你還是可以用Array.isArray(myVar)

這是一個很有名的面試題:

const Greeters = []for (var i = 0 ; i < 10 ; i++) {
  Greeters.push(function () { return console.log(i) })
}
Greeters[0]() // 10
Greeters[1]() // 10
Greeters[2]() // 10
登入後複製

你是不是認為它會輸出0, 1, 2…? 你知道為什麼它不是這樣輸出的嗎? 你會怎麼修改讓它輸出 0, 1, 2… ?

這裡有兩個可能的解決方法:

用 let 取代 var. Boom. 解決了.

#letvar的不同在於作用域。 var的作用域是最近的函數區塊,let的作用域是最近的封閉區塊,封閉區塊可以小於函數區塊(如果不在任何區塊中,則let var都是全域的)。 (來源)

替代方法: 用 bind:

Greeters.push(console.log.bind(null, i))
登入後複製

還有很多其他方法。這只是我的兩個首選

7.談到 bind

你認為這個會輸出什麼?

class Foo {  constructor (name) {this.name = name
  }
  greet () {console.log(&#39;hello, this is &#39;, this.name)
  }
  someThingAsync () {return Promise.resolve()
  }
  asyncGreet () {this.someThingAsync()
    .then(this.greet)
  }
}new Foo(&#39;dog&#39;).asyncGreet()
登入後複製

如果你認為這個程式會崩潰提示 Cannot read property 'name' of undefined,給你一分。

原因: greet 沒有在正確的脈絡中運作。同樣,這個問題依然有許多解決方案。

我個人喜歡

asyncGreet () {this.someThingAsync()
.then(this.greet.bind(this))
}
登入後複製

這樣可以確保類別的實例作為上下文呼叫greet

如果你認為greet 不應該在實例上下文之外運行, 你可以在類別的constructor中綁定它:

class Foo {constructor (name) {this.name = namethis.greet = this.greet.bind(this)
}
}
登入後複製

你還應該知道箭頭函數( => )可以用來保留上下文。這個方法也可以:

asyncGreet () {this.someThingAsync()
.then(() => {this.greet()
})
}
登入後複製

儘管我認為最後一種方法並不優雅。

我很高興我們解決了這個問題。

總結

恭喜你,你現在可以放心地把你的程式放在網路上了。甚至運行起來可能都不會出岔子(但通常會)Cheers \o/

如果還有什麼我應該提到的,請告訴我!

以上是js初學者該知道的技巧和陷阱的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1320
25
PHP教程
1269
29
C# 教程
1249
24
最簡單的硬碟序號查詢方式 最簡單的硬碟序號查詢方式 Feb 26, 2024 pm 02:24 PM

硬碟序號是硬碟的一個重要標識,通常用於唯一標識硬碟以及進行硬體識別。在某些情況下,我們可能需要查詢硬碟序號,例如在安裝作業系統、尋找正確裝置驅動程式或進行硬碟維修等情況下。本文將介紹一些簡單的方法,幫助大家查詢硬碟序號。方法一:使用Windows命令提示字元開啟命令提示字元。在Windows系統中,按下Win+R鍵,輸入"cmd"並按下回車鍵即可開啟命

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

See all articles