JavaScript 中的基本類型 vs 物件

JavaScript 中的基本類型和物件有哪些主要區別呢? 首先,讓我們定義一下什麼是基本類型。 JavaScript 中的基本類型有: 字串 (String) 數字 (Number 和 BigInt) 布林值 (true 或 false) 未定義 (undefined) 符號值 (Symbol) null 是一種特殊的基本類型。如果你執行 typeof null,會返回 'object',但它實際上是一種基本類型。 除了基本類型之外的一切都是物件。 函數也是物件。我們可以在函數上設置屬性和方法。typeof 會返回 'function',但函數構造函數是來自於物件構造函數的。 基本類型和物件之間的主要區別有: 基本類型是不可變的,物件只有一個不可變的引用,但其值可以隨時間變化 基本類型是按值傳遞,物件是按引用傳遞 基本類型是按值複製,物件是按引用複製 基本類型是按值比較,物件是按引用比較 如果我們這樣複製一個基本類型: let name = 'Flavio' let secondName = name 現在,我們可以通過將 name 變量賦予一個新值來更改它,但 secondName 仍然保存著舊值,因為它是按值複製的: name = 'Roger' secondName //'Flavio' 如果我們有一個物件: let car = { color: 'yellow' } 然後將其複製到另一個變量: let car = { color: 'yellow' } let anotherCar = car 在這種情況下,anotherCar 指向與 car 相同的物件。如果你設置:...

JavaScript 代理对象

在使用对象时,我们可以创建一个代理对象来拦截和改变现有对象的行为。 我们使用在ES2015引入的Proxy原生对象来实现。 假设我们有一个car对象: const car = { color: 'blue' } 一个非常简单的例子是当我们尝试访问一个不存在的属性时返回一个‘Not found’字符串。 你可以定义一个代理对象,每当你尝试访问这个对象的属性时都会被调用。 你可以通过创建另一个对象来实现,这个对象具有一个get()方法,接收目标对象和属性作为参数: const car = { color: 'blue' } const handler = { get(target, property) { return target[property] ?? 'Not found' } } 然后我们可以通过调用new Proxy()来初始化我们的代理对象,传递原始对象和我们的处理程序: const proxyObject = new Proxy(car, handler) 现在尝试访问car对象中包含的属性,但是从proxyObject引用它: proxyObject.color //'blue' 这就像调用car.color一样。 但是当你尝试访问car上不存在的属性,比如car.test,你将得到undefined。使用代理,你将得到我们告诉它返回的'Not found'字符串。 proxyObject.test //'Not found' 我们在代理处理程序中不仅限于使用get()方法。这只是我们可以编写的最简单的例子。 我们还有其他可以使用的方法: apply当我们在对象上使用apply()时调用这个方法 construct当我们访问对象的构造函数时调用已经被执行 deleteProperty当我们尝试删除一个属性时被执行 defineProperty当我们在对象上定义一个新的属性时调用 set当我们尝试设置一个属性时被执行 等等。基本上我们可以创建一个受保护的门,来控制一个对象上发生的一切,并提供其他规则和控制来实现我们自己的逻辑。 我们还可以使用其他方法(也称为陷阱): enumerate getOwnPropertyDescriptor getPrototypeOf has isExtensible ownKeys preventExtensions setPrototypeOf 所有这些都对应于相应的功能。...

JavaScript等號運算子

學習 JavaScript 等號運算子的基礎知識 這些運算子接受兩個值並返回布林值: == 檢查是否相等 != 檢查是否不相等 === 檢查是否嚴格相等 !== 檢查是否嚴格不相等 現在來談談我們所謂的“嚴格”。在非嚴格檢查中,第二個運算元在進行比較之前會被轉換為第一個運算元的類型。嚴格模式則會阻止這種轉換。 舉例如下: const a = true a == true // true a === true // true 1 == 1 // true 1 == '1' // true 1 === 1 // true 1 === '1' // false 無法檢查對象的相等性:兩個對象永遠不相等。唯一可能為真的情況是兩個變量引用了同一個對象。 還有一些需要注意的特殊情況:NaN 始終與 NaN 不相等。 NaN == NaN // false 在非嚴格模式下,null 和 undefined 的值是相等的: null == undefined // true null === undefined // false

JavaScript食譜

JavaScript食譜包含許多有用的教學文章,解釋如何在JavaScript中執行常見的操作。 注意:此文檔將不斷更新。隨著時間的推移,此文章將填滿大量有用的教學內容。 字串 如何將JavaScript字串中的首個字母轉成大寫 如何在JavaScript中檢查字串是否包含子字串 如何在JavaScript中替換字串的所有出現 如何將字串轉換為數字 如何在JavaScript中創建多行字串 如何在JavaScript中檢查字串是否以另一個字串開頭 數字 如何去掉JavaScript數字中的前導零 如何將數字格式化為貨幣值 如何在JavaScript中生成兩個數字之間的隨機數 日期 如何在JavaScript中獲取當前的時間戳記 物件 如何從JavaScript物件中刪除屬性 如何檢查JavaScript物件 如何深度克隆JavaScript物件 如何檢查JavaScript物件屬性是否為未定義 如何合併兩個JavaScript物件 如何在JavaScript中動態訪問物件的方法 如何使用解構語法處理數組和物件 如何計算JavaScript物件中的屬性數量 如何列出JavaScript物件的所有方法 數組 如何從JavaScript數組中刪除項目 如何在JavaScript數組中追加項目 如何在JavaScript中使用值初始化新數組 如何在Array.map()中使用Async和Await 如何清空JavaScript數組 如何按屬性值對JavaScript物件數組進行排序 如何從JavaScript數組中獲取一組物件的唯一屬性 函數 如何在JavaScript中設置默認參數值 循環 如何在JavaScript的for-of循環中獲取迭代的索引

Swift 物件

本教程屬於 Swift 系列 在 Swift 中,一切皆為物件。即使我們將數值 8 賦予變數 age,這個 8 也是一個物件。 在某些語言中,物件是一種特殊型別。但在 Swift 中,一切皆為物件,這導致了 Swift 的一個特點:每個值都可以「接收訊息」。 每種型別可以有多個與之相關的函式,我們稱之為方法。 舉例來說,對於數值 8,我們可以呼叫其 isMultiple 方法,以檢查該數字是否為另一數字的倍數: 字串值有另外一組方法。 一個型別也可以有實例變數。例如,字串型別有一個名為 count 的實例變數,可用於獲取字串中的字符數量: Swift 有三種不同的物件型別,我們稍後會詳細介紹:類別(classes)、結構體(structs)和列舉型別(enums)。 它們之間非常不同,但有一個共同點:對於物件型別,我們可以新增方法,並且對於任何型別的任何值,我們都可以發送訊息。

在 JavaScript 中解構對象和數組

學習如何使用解構語法在 JavaScript 中處理數組和對象 給定一個對象,使用解構語法可以將其中一些值提取出來並放入命名變量中: const person = { firstName: 'Tom', lastName: 'Cruise', actor: true, age: 54 // made up } const { firstName: name, age } = person // name: Tom, age: 54 name 和 age 包含了所需的值。 這種語法也可以應用於數組: const a = [1, 2, 3, 4, 5] const [first, second] = a 這個語句通過從數組 a 中使用索引 0、1、4 獲取項目創建了 3 個新變量: const [first, second, , , fifth] = a