首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 連續賦值 `var rdp = rdp = {};` 真相:其實是多變數同時初始化縮寫

     編輯:程式設計疑難解答

直接結論

var rdp = rdp = {} 中的兩個 `=` **不是聲明賦值兩次**,而是鏈式賦值表達式,等價於:

var rdp = {}, rdp2 = {};  // 兩個不同變數同時初始化為空物件

但因為左右變數名**完全相同**(都是 `rdp`),第二個賦值覆蓋第一個,**毫無意義**,純屬多餘代碼。

標準語法解析

var a = b = c = {};  // 從右向左結合
// 步驟:
// 1. 創建物件 {}
// 2. c = {}  (若 c 未聲明,嚴格模式拋錯,非嚴格模式創建全域變數)
// 3. b = c 的結果 (即 {})
// 4. a = b 的結果 (即 {})
// 5. var a 宣告區域變數 a

正確的多變數同時初始化寫法

// 推薦:單 var 多宣告,清晰無歧義
var objA = {}, objB = {};

// 或 ES6 解構賦值
const [objA, objB] = [{}, {}];

為什麼會寫成 `var rdp = rdp = {}`?

  • **誤以為必須寫兩次** 才能「聲明並賦值」。
  • **複製粘貼殘留**:原本是 `var a = b = {}` 重構時忘記改名。
  • **誤解鏈式賦值優先級**:以為 `var` 只綁定第一個 `rdp`。

最佳實踐

  1. **一個聲明一個變數**(或同類變數用逗號分隔 `var a = {}, b = {};`)。
  2. **嚴格模式 (`'use strict'`)** 下,未聲明變數賦值直接報錯,能及早發現此類問題。
  3. **ES6 使用 `const`/`let`** 塊級作用域,避免全域汙染與提升陷阱。

看到 `var x = x = ...` 直接刪掉後面的 `x =`,保留 `var x = ...` 即可。代碼潔癖從拒絕無意義鏈式賦值開始。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved