对象Object
3.1语法
对象可以通过两种形式定义:声明(文字和构造形式)
var person={
name:"JackMa",
age:10086
}
//构造形式
var p1=new person();
p1.sex="女"
3.2 类型
对象是JS的基础,在JS中共有六项主要的类型,分别是:
string、number、boolean、null、undefined、object
JS中万物接对象是错的,在JS中函数是一等公民
var fun=function(){
console.log("this is a function!");
}
var obj={
name:"jackMa"
}
console.log(typeof(fun)); //返回function
console.log(typeof(obj)); //返回object
console.log(typeof(Number));//function
console.log(typeof(Object));//function
console.log(typeof(String));//function
console.log(typeof(null)); //object
console.log(typeof(undefined));//undefined
console.log(typeof(NaN)); //Number
3.3 内容
var myObj={
a:2
}
console.log(myObj.a); //返回2
console.log(myObj['a']);//返回2
在对象中,属性永远都是字符串,如果你是用string()意外的其他值作为属性名,那它会转换为字符串
3.3.1可计算的属性名
var jack="Jack";
var myObj={
[jack+"name"]:"JackMa",
[jack+"age"]:188
}
myObj["jackname"]; //返回jackMa
myObj["jackage"]; //返回188
3.3.2属性与函数
函数永远不属于同一个对象
function foo(){
console.log("foo");
}
var somFoo=foo;
var myObj={
someFoo:foo
}
foo; //返回function foo(){...}
someFoo;//返回function foo(){...}
myObj.someFoo;//foo(){...}
3.3.3数组
数组也是对象,虽然每个下标都是整数,但是你仍然可以给数组添加属性
var arr=["jack","ma","1314520"];
arr.sex="女"
3.3.4 复制对象
1、引用,浅拷贝
function annotherFunction(){}
var annotherObj={
c:true
}
var anoArray=[];
var myObj={
a:2,
b:anoArray, //这里是引用
c:annotherObj,//这里是引用
}
JS在ES6中定义了Object.assign(..)方法来实现浅拷贝
解构一个和Json对象格式完全一致的方法 var newJson=JSON.parse(JSON.stringify(somJsonFile)) tips:在cesium.js中,加载gltf文档实际上也是通过JSON.parse()来进行解构gltf文件的
3.3.5 属性描述符
在ES5之前,JS语言本身没有提供可以检测属性特性的方法
var myObj={
a:2
}
Object.getOwnPropertyDescriptor(myObj,"a");
/* 这里返回
value:2
writeable:true,
enumerable:true
configurable:true
*/
1、Writeable是否可写,可修改 2、configurable是否可操作,也就是属性特性里的描述是否可修改,为false的时候Writeable仍然可以改为false
3.3.6 不变性
所有的方法创建的都是浅的不变性
3.4遍历
1、for循环遍历
2、for...of遍历
3、for...in遍历