YDKJS02-Object对象

92 阅读2分钟

对象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遍历