sKey ? obj[sKey] || "" : obj; 老师这句的意思是什么呀,我有点看不懂

来源:11-2 Vuex中购物车数据结构的设计(1)

小秃僧

2021-10-08

sKey ? obj[sKey] || “” : obj; 老师这句的意思是什么呀,我有点看不懂

写回答

2回答

Dell

2021-10-08

搜索下 optional chaining 语法

0
1
小秃僧
好的,谢谢老师!
2021-10-08
共1条回复

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 是 ""(空字符串)、undefinednull 等,它就是 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(比如 undefinednull"" 等),就返回空字符串 ""

✅ 这是一种常见的“默认值设置技巧”,用来避免 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(比如 undefinednull"" 等)

  • 不尝试访问 obj[sKey],而是直接返回 obj 这个对象本身。


0
0

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3382 学习 · 1454 问题

查看课程