你不知道的Javascript之对象

对象有二种形式:声明文字 与构造形式;

文字:
var myobj = {
key:value,
//........ 可以多添加内容
}
构造:
var myobj = new Object();
myobj.key = value; //内容必须逐个添加;

内置对象
String Number Boolean Object Function Array Date RegExp Error
对象的访问
var myobj = {
a:2,
b:3
}
myobj.a//2 点语法通常为 属性访问
myobj["a"]//2 中括号通常称为 键访问
还有例如:在对象中 属性名永远是字符串
如果中括号中
var myobj = {};
myobj[true] = "foo";
myobj[3] = "bar";
myobj[myobject]="baz";
自动转化
myobj["true"]= "foo";
myobj["3"] = "bar"; //与数组是有区别的 注意!!!!!

属性与方法:

无论对象返回声明类型,每次访问对象的属性就是属性访问,如果属性访问返回的是一个函数,那它并不是一个"方法",属性访问返回
的函数和其他函数没有任何区别(除了this的隐式绑定);
function foo()
{
console.log("foo");
}
var somefoo = foo;
var myobj = {
somefoo:foo;
}
那么: myobj.somefoo 与 somefoo 没有区别 知识对与同一个函数的不同引用;
即使你在对象的文字形式中声明一个函数表达式,这个函数也不会属性这个对象;
他们只是对应相同函数的不同引用;
var myobj = {
foo:function()
{
console.log("foo");
}
}
var somefoo = myobj;
somefoo;
myobj.foo;

数组

深复制
var newobj = JSON.parse(JSON.stringify(someobj));
浅复制
ES6中出现的新方法 Object.assign(第一个参数是目标对象,之后跟一个或多个源对象)
遍历所有可以枚举的对象

属性描述
判断属性是否只读
var myobj = {a:2};
Object.getOwnPropertyDescriptor(myobj,"a"){
value:2,
writable:true, //是否修改属性的值
enumerable:true, //可配置的
configurable:true //属性描述符 是否属性出现在对象的属性枚举中
}

原文地址:https://www.cnblogs.com/h5monkey/p/6478645.html