对象初始值设定项
试试看
常量对象1={a:“foo”,b:42,c:{}}; console.log(对象1.a); //预期输出:“foo” const a=“foo”; 常数b=42; 常数c={}; 常量对象2={a:a,b:b,c:c}; console.log(对象2.b); //预期产量:42 常量对象3={a,b,c}; console.log(对象3.a); //预期输出:“foo”
语法
o={ a: “foo”, b: 42、, c: {}, 1:“数字文字属性”, “foo:bar”:“字符串文字属性”, 速记属性, 方法(参数){ // … }, 获取属性(){}, 设置属性(值){}, [表达式]:“计算属性”, __proto__:原型, …spreadProperty, };
描述
对象文字语法与JSON
JSON格式 只有 允许使用 “属性”:value 语法。 属性名称必须用双引号引起来,并且定义不能是速记。 也不允许使用计算属性名称。 JSON对象属性值只能是字符串、数字、, 真的 , 假 , 无效的 、数组或其他JSON对象。 这意味着JSON不能表达方法或非显式对象,如 地图 或 注册Exp . 在JSON中, “__协议__” 是一个普通属性键。 在对象文字中,它 设置对象的原型 .
console.log(JSON.parse('{“__proto__”:0,“__prodo__”:1}'); //{__proto__:1} 控制台.log({“__proto__”:0,“__prodo__”:1}); //语法错误:对象文本中不允许重复的__proto__字段 console.log(JSON.parse('{“__proto__”:{}}')); //{__proto_:{}} 控制台.log({“__proto__”:{}}); //{}(以{}为原型)
示例
创建对象
常量对象={};
常量对象={ foo:“bar”, 年龄:42岁, baz:{myProp:12}, };
访问属性
对象.foo; //“bar” 对象[“年龄”]; // 42 对象对象; //{myProp:12} 对象.baz.myProp; // 12
属性定义
const a=“foo”; 常数b=42; 常数c={}; 常数o={ a: a、, b: b、, c: c、, };
const a=“foo”; 常数b=42; 常数c={}; //速记特性名称 常数o={a,b,c}; //换句话说, 控制台.log(o.a==={a}.a); //真
重复的属性名称
常数a={x:1,x:2}; 控制台.log(a); //{x:2}
方法定义
计算的属性名称
//计算的属性名称 设i=0; 常数a={ [`foo${++i}`]:i, [`foo${++i}`]:i, [`foo${++i}`]:i, }; 控制台.log(a.foo1); // 1 控制台.log(a.foo2); // 2 控制台.log(a.foo3); // 3 常量项=[“A”、“B”、“C”]; 常量对象={ [项目]:“你好”, }; 控制台日志(obj); //A、B、C:“你好” 控制台.log(obj[“A,B,C”]); //“你好” const param=“大小”; 常量配置={ [参数]:12, [`mobile${param.charAt(0).toUpperCase()}${param切片(1)}`]:4, }; console.log(配置); //{size:12,mobileSize:4}
排列属性
常量obj1={foo:“bar”,x:42}; 常量obj2={foo:“baz”,y:13}; const clonedObj={…obj1}; //{foo:“bar”,x:42} const mergedObj={…obj1,…obj2}; //{foo:“baz”,x:42,y:13}
原型设置器
常量obj1={}; console.log(Object.getPrototypeOf(obj1)===Object.protype); //真 常量obj2={__proto_:空}; console.log(Object.getPrototypeOf(obj2)); //空 const protoObj={}; 常量对象3={“__proto__”:protoObj}; console.log(Object.getPrototypeOf(obj3)===protoObj); //真 const obj4={__proto__:“不是对象或空”}; console.log(Object.getPrototypeOf(obj4)===对象原型); //真 console.log(Object.hasOwn(obj4,“__proto__”)); //错误
const __proto__=“变量”; 常量obj1={__proto__}; console.log(Object.getPrototypeOf(obj1)===对象原型); //真 console.log(Object.hasOwn(obj1,“__proto__”)); //真 控制台.log(obj1.__proto__); //“变量” const obj2={__proto_(){返回“hello”;}}; 控制台.log(obj2.__proto_()); //“你好” 常量obj3={[“__proto_”]:17}; 控制台.log(obj3.__proto__); // 17 //使用“__proto__”键将prototype setter与普通自己的属性混合 常量obj4={[“__proto__”]:17,__proto:{}}; //{__proto__:17}(使用{}作为原型) 常量对象5={ [“__proto__”]:17, __原__:{}, __proto__:null,//语法错误:对象文本中不允许重复的__proto__字段 }; 常量对象6={ [“__proto__”]:17, [“__proto__”]:“你好”, __proto__:空, };//{__proto_:“hello”}(原型为null) 常量对象7={ [“__proto__”]:17, __原型__, __proto__:空, };//{__proto__:“变量”}(原型为null)