JavaScript,如何擴展類

如何在JavaScript中擴展類 JavaScript中的繼承是通過類進行的。 假設你有一個類Animal: class Animal { breathe() { //... } } 所有的動物都會呼吸。我想這可以作為一個通則。 但不是所有的動物都會走路。有些動物可以飛行等。 所以我們可以通過擴展這個類來形成不同的種類,並從基類中繼承breathe()方法,同時提供特定的方法和屬性: class Fish extends Animal { swim() { //... } } class Bird extends Animal { fly() { //... } } 你可以使用new關鍵字實例化一個類的實例,最終得到一個對象: const randomAnimal = new Animal() const hummingbird = new Bird()

JavaScript,如何獲取某個字符之前的字符串

我需要獲取字符串的前半部分。 基本上是在特定字符“-”之前的所有內容。 以下是我所做的: const str = 'test-hey-ho' str.split('-')[0] //'test'

JavaScript,如何過濾陣列

如何在 JavaScript 中過濾陣列 您有一個陣列,希望過濾它,以獲取原始陣列中僅包含某些值的新陣列。 怎麼做呢? JavaScript 陣列提供了一個內建的 filter() 方法,我們可以用它來完成這個任務。 假設我們有一個包含 4 個代表 4 隻狗的物件陣列: const dogs = [ { name: 'Roger', gender: 'male' }, { name: 'Syd', gender: 'male' }, { name: 'Vanille', gender: 'female' }, { name: 'Luna', gender: 'female' } ] 然後您想要過濾僅保留雄性狗。 可以這樣做: const maleDogs = dogs.filter((dog) => dog.gender === 'male') // [ { name: 'Roger', gender: 'male' }, { name: 'Syd', gender: 'male' } ]

JavaScript:如何獲取物件的類別名稱

如果你有一個由類別生成的物件,且你想要得到它的類別名稱,該怎麼做呢? 假設你有一個由類別生成的物件,你想要得到它的類別名稱。 舉個例子,可以參考下面的程式碼: class Dog { } const roger = new Dog() 當然,現在我們知道roger是一個由Dog類別創造出的物件。 但是,如果你不知道物件的類別,該如何取得它的類別名稱呢? 你可以查找物件的建構函式(constructor),然後參考它的name屬性。 以下是一個例子: class Dog { } const roger = new Dog() console.log(roger.constructor.name) // 'Dog' 這個方法會返回一個代表類別名稱的字串。 你也可以直接將constructor屬性與類別進行比較,像這樣: class Dog { } const roger = new Dog() roger.constructor === Dog //true 這個方法同樣會返回true,表示物件的建構函式與類別一致。

JavaScript三元運算子

學習JavaScript三元運算子的基礎知識 三元運算子是JavaScript中唯一可以使用3個運算元的運算子,它是一種表示條件語句的簡潔方式。 它的語法如下: <condition> ? <expression> : <expression> 條件 <condition> 將被求值為布林值,在根據結果,運算子將運行第一個表達式(如果條件為真)或第二個表達式。 以下是一個示例:我們檢查 running 是否等於 true,如果是的話,我們調用 stop() 函數。否則,我們調用 run() 函數: 使用示例: const running = true; (running === true) ? stop() : run()

Javascript中有哪些方法可以跳出循環?

以下是一個for循環的範例: const list = ['a', 'b', 'c'] for (let i = 0; i < list.length; i++) { } 我們可以使用break關鍵字在任何時候跳出循環: const list = ['a', 'b', 'c'] for (let i = 0; i < list.length; i++) { if (list[i] === 'b') break console.log(list[i]) } break也適用於for..of循環: const list = ['a', 'b', 'c'] for (const item of list) { if (item === 'b') break console.log(item) } 以及while循環: const list = ['a', 'b', 'c'] let i = 0 while (i < list....

JavaScript中的“==”和“===”等操作符有何不同?

在JavaScript中,我們可以使用兩種不同的操作符來檢查對象的相等性,它們分別是“==”和“===”。 這兩者基本上做的是相同的事情,但它們之間有一個很大的不同之處。 “===”用於檢查兩個值是否相等。如果它們是對象,則這兩個對象必須是相同的類型。正如大家所知,JavaScript是動態類型語言,但是你需要了解一些基本的類型。 具體而言,我們有“值類型”(布爾型、null、undefined、字符串和數字)和“引用類型”(數組、對象、函數)。 如果兩個值的類型不同,則“===”將返回false。 如果它們是相同的類型,JavaScript將進一步檢查它們是否相等。 對於引用類型來說,這意味著這兩個值必須引用相同的對象/數組/函數,而不僅僅是具有相同的值。 而“==”則不同,它會嘗試將類型轉換為相匹配的類型。 這就是為什麼你會得到以下結果: false == '0' // true false === '0' // false null == undefined // true null === undefined // false 根據我的經驗,在97%的情況下,你會希望使用“===”,除非“==”與你想要的完全相同。它的缺陷和邊界情況較少。 同樣,對於“!=”和“!==”,它們執行的是相同的操作,只是取反的結果。 總是使用“!==”作為默認選擇。

JavaScript中的值是傳值還是傳址?

答案是:取決於具體情況! 原始資料類型是按值傳遞。 物件是按址傳遞。 原始資料類型包括數字、字串、布林值、null、undefined和符號。 除了原始資料類型外,其他都是物件。陣列是物件。函式是物件。 當你將一個數字傳遞給一個函式時,它將被複製到該函式內部: const increment = num => { num = num + 1 } const num = 2 increment(num) console.log(num) //2 如果你傳遞一個物件,它將按址傳遞,所以如果你修改其中一個屬性,原始物件也會被修改: const increment = num => { num.value = num.value + 1 } const num = { value: 2 } increment(num) console.log(num.value) //3

JavaScript中的双重否定运算符!!是做什么用的?

你可能在实际的代码中看到过!!运算符。它是什么意思呢? 假设你有一个表达式,它会给你一个结果。 你希望这个结果是一个布尔值。要么是true,要么是false。 不是一个字符串,0,一个空字符串,undefined,NaN或者其他任何值。只要是true或者false就行。 !!运算符就是为了做到这一点的。 实际上,它是两个否定运算符连在一起。JavaScript中没有!!运算符,但是有!运算符。 它首先对表达式的结果进行否定,然后再次进行否定。这样,如果你有一个非零的数字、字符串、对象、数组或者任何“真值”,你将会得到true作为结果。 否则,你将会得到false作为结果。

JavaScript中的延遲和承諾(+ Ember.js示例)

承諾是一種相對較新的處理異步的方式,它可以非常有助於結構化代碼。 警告:此帖子已經過時並且可能不反映最新的技術水平。 請查看我的Promises guide和我的async/await guide。 承諾是事件的對象表示方式。在其生命週期中,當調用時,承諾從待定狀態轉換為已解決或已拒絕狀態,或者它也可以永遠保持待定狀態而不解決。 它是一種對JavaScript事件的新方法,但我認為它生成的代碼更易讀且更少出錯。目前,在JavaScript中有兩種稍有不同的主要承諾實現:遵循Promises/A規範的庫和jQuery。 首先,我將考慮jQuery,因為它無處不在且我使用它,所以如果您不希望使用另外一個外部庫,可以使用它。 介紹jQuery Promise 讓我們介紹延遲的概念。首先,延遲是一個承諾,除了您可以觸發一個延遲(解決或拒絕它)之外,通過承諾,您只能添加回調,並且它將由其他東西觸發。如果您希望,承諾是延遲的“只收聽”部分。 這是一個清晰的例子: var promise = $('div.alert').fadeIn().promise(); 您現在可以添加.done()和.fail()來處理回調。這只是一個調用示例,使用承諾的動畫已經成為jQuery 1.8中的一個真正的東西,同時帶有進度的回調。 另一個例子是AJAX調用: var promise = $.get(url); promise.done(function(data) {}); 延遲是您可以創建的東西,設置回調並解決的東西,例如: var deferred = new $.Deferred(); deferred.done(function(data) { console.log(data) }); deferred.resolve('some data'); 延遲的狀態可以使用.resolve()或.reject()觸發。一旦延遲狀態已經更改為最終階段(已解決/已拒絕),它就無法再改變。 var deferred = new $.Deferred(); deferred.state(); // "pending" deferred.resolve(); deferred.state(); // "resolved" 我們可以將以下回調附加到一個承諾: .done() // 當承諾成功執行時運行 .fail() // 當承諾失敗時運行 .always() // 無論什麼情況下都運行 可以使用.then()一起調用這些回調,如下所示: promise.then(doneFunc, failFunc, alwaysFunc); 這只是對承諾和延遲的jQuery實現的介紹。讓我們寫一些真實世界的例子。 (如果在node中執行,可以使用$ = require('jquery');導入jQuery) 一些jQuery示例 例如,這裡我們執行一個函數,當它完成時調用dfd.resolve()。類似於使用回調,但更具結構性和可重用性。...