sKey ? obj[sKey] || "" : obj; 老师这句的意思是什么呀,我有点看不懂
来源:11-2 Vuex中购物车数据结构的设计(1)

小秃僧
2021-10-08
sKey ? obj[sKey] || “” : obj; 老师这句的意思是什么呀,我有点看不懂
2回答
-
搜索下 optional chaining 语法
012021-10-08 -
yorkchiu
9天前
一、代码解析(JavaScript 层面)
我们先从纯 JavaScript 的角度来拆解这段代码:
javascript复制sKey ? obj[sKey] || "" : obj;
这是一个 三元表达式(ternary operator),它的结构是:
javascript复制条件 ? 表达式1 : 表达式2
意思是:
如果
条件
为真(truthy),执行表达式1
;如果
条件
为假(falsy),执行表达式2
。
1️⃣
sKey
是什么?sKey
应该是一个变量,通常可能是一个 字符串,比如"name"
、"age"
等,用来作为对象的键(key)去访问对象的属性。在 JavaScript 中,
sKey
在这里被用作条件判断:如果
sKey
是一个非空字符串(比如"name"
),它就是 truthy(真值),条件成立;如果
sKey
是""
(空字符串)、undefined
、null
等,它就是 falsy(假值),条件不成立。
2️⃣
obj[sKey]
是什么?obj
应该是一个对象(JavaScript 中的对象,类似 Python 的字典),比如:javascript复制const obj = { name: "小明", age: 18};
obj[sKey]
的意思是通过变量sKey
作为键(key),去访问obj
对象中的属性值。举个例子:
javascript复制const obj = { name: "小明", age: 18 };const sKey = "name";console.log(obj[sKey]); // 输出:"小明"
如果
sKey
是"name"
,那么obj[sKey]
就是取obj
中的name
属性的值。但如果
sKey
是一个不存在的键,比如"gender"
:javascript复制console.log(obj["gender"]); // 输出:undefined
3️⃣
obj[sKey] || ""
是什么?这里用到了 JavaScript 的逻辑或运算符
||
。a || b
的意思是:如果
a
是 truthy(真值),就返回a
;
如果a
是 falsy(假值),就返回b
。所以:
javascript复制obj[sKey] || ""
的意思是:
如果
obj[sKey]
的值是 truthy(比如一个字符串、数字、对象等),就返回obj[sKey]
;如果
obj[sKey]
的值是 falsy(比如undefined
、null
、""
等),就返回空字符串""
。
✅ 这是一种常见的“默认值设置技巧”,用来避免
undefined
或null
导致的错误,尤其是在模板中显示数据时,避免出现“undefined”这样的字样。4️⃣ 整体含义:
sKey ? obj[sKey] || "" : obj
现在我们把前面的知识整合起来,完整解释这句代码:
javascript复制sKey ? obj[sKey] || "" : obj;
它的意思是:
如果
sKey
是 truthy(比如一个非空字符串):尝试从
obj
中取出sKey
对应的值(obj[sKey]
);如果这个值存在(不是
undefined
或null
),就返回它;如果这个值不存在(是
undefined
或null
),就返回空字符串""
。
如果
sKey
是 falsy(比如undefined
、null
、""
等):不尝试访问
obj[sKey]
,而是直接返回obj
这个对象本身。
00