"JavaScript02 对象.pdf 是一份前端学习资料,主要涵盖了JavaScript中的对象相关知识,包括对象属性、对象方法、创建对象的四种方法、对象比较、原型(prototype)和原型链(prototype chain)、基于原型链的继承、删除属性、静态属性(static)、setter和getter、常用的内置对象如Function、Number、Math、Date、String,Array数组及其自定义排序、类型数组视图(Typedarrayviews)、关系操作符in和instanceof、ECMAScript6引入的集合对象Map和Set,以及Object和Map的对比、Array和Set的转换、枚举对象所有属性的方法等。"
在JavaScript中,对象是一种数据结构,它们由一组键值对组成,每个键都是一个字符串,每个值可以是任何数据类型,包括函数。对象的属性定义了它的特征,而方法则描述了对象的行为。例如,创建一个代表人物的对象,如“周杰伦”,可以有“name”、“age”、“sex”等属性,以及“sing”和“dance”等方法。
创建JavaScript对象有多种方式:
1. **字面量语法**:直接通过大括号{}定义,如`var obj = {key1: value1, key2: value2};`
2. **构造函数**:使用`new Object()`,然后通过`.`或`[]`操作符添加属性和方法。
3. **对象字面量与函数结合**:创建一个函数,返回一个初始化的对象。
4. **Object.create()**:利用原型链创建新对象,如`var newObj = Object.create(baseObj);`
比较对象时,JavaScript默认的相等运算符(`==`和`===`)并不适用于比较两个对象是否相等,因为它们比较的是引用,而不是对象的内容。如果需要比较对象的内容,需要自定义比较逻辑。
原型(prototype)是JavaScript实现继承的关键机制,每个函数都有一个`prototype`属性,当试图访问对象的一个不存在的属性时,JavaScript会查找该对象的原型,如果在原型中找到了这个属性,就会返回其值。原型链是由原型对象形成的链条,通过`__proto__`或`Object.getPrototypeOf()`可以访问。
基于原型链的继承允许一个对象继承另一个对象的属性和方法。通常通过修改`prototype`属性实现,例如`Child.prototype = new Parent();`。
删除对象属性,可以使用`delete`操作符,如`delete obj.key;`,但这并不会真正释放内存,只是让该属性不可访问。
静态属性(`static`)在ES6中用于类,不是实例的属性,而是类本身的属性,通常用于定义类的共享方法。
setter和getter是访问器属性,用于在访问或设置对象属性时执行自定义逻辑,如`Object.defineProperty(obj, 'key', {get: function(){...}, set: function(val){...}});`
JavaScript还提供了很多内置对象,如Array、String等,Array有丰富的数组操作方法,如`sort()`可以自定义排序规则。TypedArray是固定大小的二进制数据视图,提供高性能的数据操作。
关系操作符`in`用于检查对象是否包含指定的属性,`instanceof`用于检测对象是否是某个类的实例。
ECMAScript6引入的Map和Set提供了键值对存储和集合操作的新方式,Map的键可以是任意类型,Set则存储不重复的元素。Object和Map的区别在于Key的类型和遍历方式,Array和Set的转换则涉及不同的数据结构操作。
枚举对象的所有属性可以使用`for...in`循环,或者`Object.keys(obj)`获取所有可枚举属性的键数组,对于不可枚举和原型链上的属性,还可以结合`Object.getOwnPropertyNames()`和`Object.getPrototypeOf()`进行遍历。