对象数组的 Javascript 文字表示法
Javascript literal notation for array of objects
我试图理解一些用Javascript编写的代码,但我被困在语法上。
var connections = {}; // I know '{}' means new Object()
var messages = {};
对象包含变量路径、版本等,但在代码中,以下行有什么作用?
connections[ path ] = connections[ path ] || [];
messages[ path ] = messages[ path ] || { version: 0, body: ''};
由于connections
和messages
是对象,因此[
和]
不表示数组索引,而是访问成员的语法,其中变量用于查找变量的名称。
var path = 'x'
connections[path] = connections[path] || [];
以上,因为path = 'x'
等于
connections.x = connections.x || [];
它的意思是,如果由 path
的值命名的两个对象的成员存在,请保留它(将其当前值分配给自身(,否则(此处||
用于合并(分别创建一个新的空数组或一个新的{ version: 0, body: '' }
。
请注意,合并/逻辑OR可以很容易地从左到右链接。例如,在某些情况下,您可能想要执行以下操作:
function createItem(color) {
// if a color is specified in the arguments, use that
// otherwise, if a color is specified in the settings object for this instance
// of the current user control, use that. otherwise, fall back to the global
// default values. if none of these settings have been defined, use black.
color = color || instanceSettings.defaultColor
|| globalSettings.defaultColor
|| '#000000';
...
}
如果之前没有初始化过 path 属性,或者它包含 null 或 false 或 0,它就会初始化 path 属性。
换句话说(或其他代码(:
if (connections[path] === null || connections[path] === undefined || connections[path] === 0 || connections[path] === false) {
connections[path] = [];
} else {
connections[path] = connections[path];
}
与消息[路径]相同,只是它使用某个对象而不是空数组对其进行初始化。
关键是要理解逻辑 OR (||
( 运算符。在 JavaScript 中,首先测试运算符左侧的表达式。如果解析为 true,则返回该表达式;如果解析为 false,则返回右侧的表达式。这是为变量分配默认值的好方法。
其次,connections[path]
不是访问数组的元素。如果path
解析为字符串,则connections[path]
等效于connections.path
,它只是访问connections
对象的该成员。
connections[path] = connections[path] || [];
编写此代码的人希望路径成员是一个空数组(如果没有别的(。这条线本质上是在检查connections[path]
是否真实。如果该path
成员中有什么东西,它将独自一人;否则,它将是一个空数组。
messages[path] = messages[path] || { version: 0, body: '' };
其功能与上一行相同,只是默认值是包含两个成员的对象,而不是空数组。
connections[ path ] = connections[ path ] || [];
大致翻译为
connections[ path ] = connections[ path ] != null ? connections[ path] : [];
在这种情况下,这是为connections[path]
设置默认值的便捷方法(即,如果尚未设置任何值,则将值设置为 []
(
在某些语言(例如Ruby(中,这可以写得更短
。connections[path] ||= []
||
运算符表示 OR so 与 connections[ path ] = connections[ path ] || [];
我们正在执行检查以查看 connections[ path ] === null
或是否 connections[ path ] === undefined
,如果是这种情况,我们将connections[ path ]
分配给空数组。
使用messages[ path ]
我们执行相同的检查,如果它是空值或未定义,我们为其分配值{ version: 0, body: ''}
例如,让连接和消息成为对象,如下所示。
var connections={
"path":"http://www.xyz.com",
"version":"1.2.0"
};
var messages={
"text':"This is message",
"path":"http://www.xyz.com",
"version":'1.2.0',
"body":""
};
现在下面的代码工作如下:1.如果上面提到的对象中不存在路径,则为其分配空白字符串。2.同样,消息的路径将是对象"路径"中存在的路径。否则,它将是"版本"和"正文"的对象
connections[ path ] = connections[ path ] || [];
messages[ path ] = messages[ path ] || { version: 0, body: ''};
连接和消息只是JavaScript对象的JSON表示。因此,connections[path] 与 connections.path 相同。签名 ||用于在对象中不存在或未定义实际值时分配空白值。
我应该激发你的想象力
a || b 返回不包含任何类型的 false 值的第一个元素。
connections[ path ] || [];
// return [] ( empty array) if connections[ path ] is return false ( or undefined, 0, [], "", NaN etc)
- 如何避免“;使用数组文字表示法“;以下javascript代码中的jslint错误
- 文字与原型对象表示法的数据结构
- 是否可以在 JavaScript 对象文字表示法中创建只读成员
- 在对象文字上调用函数,由字符串 - JavaScript 表示
- 使用原型和对象文字表示法创建对象之间的区别
- 如何在 JS 中编写数组文字表示法
- 创建 JS 对象:使用文字表示法或设置变量
- Object.defineObject,重用对象或对象文字表示法
- 使用点和文字表示法构造的 JavaScript 对象在调用时的行为如何
- Javascript 对象文字表示法的意外行为
- 使用javascript对象文字表示法定义函数
- Javascript对象文字表示法,使用函数
- 以 JavaScript 对象文字表示法设置函数的属性
- 包含函数的对象文字表示法的执行速度是否比(全局范围)普通函数(取消引用)更快
- 将对象文字表示法转换为数组
- UnCaught TypeError-Javascript中的嵌套对象?为什么不允许这样做?对象文字表示法有效
- 什么'我的代码在用对象文字表示法创建方法时出错了
- 对象数组的 Javascript 文字表示法
- 使用对象文字表示法创建对象的有效Javascript语法是什么?
- 这个javascript对象文字表示法有什么问题?