看了很多大佬的blogs和文章,越来越觉得js基础的重要性,无论是各类开源框架还是三方的类库,唯有扎实js基本功才能驾驭,对今后造轮子也大有裨益。最近正在晒网期,来慢慢学习一下。本人语言表达能力很差,随便写来自己看看。
一、对象
JavaScript中所有的事物都是对象,包括如 String、Date、Array 等等。对象是带有属性和方法的特殊数据类型
这里就不说创建对象的方式了,一般的对象都可以转换成以下形式:
var person={
name:"Lucy",
age:22,
Job:"Software Engineer",
sayName:function(){
consoe.log("my name is“+this.name)
}
}
二、属性类型
前面说了,对象是带有属性和方法的特殊数据类型。在ES5中用attribute描述属性的特征,通常用[[]]包含特征值 ,eg:[[Enumerable]]
ECMAScript中的属性有两种:数据属性和访问器属性
1.数据属性
数据属性有4个描述属性的特征
[[Configurable]]:表示能否通过delete 删除属性而重新定义属性,默认为true
[[Enumerable]]:表示能否通过for-in循环遍历属性,默认true
[[Writable]]:能否修改属性的值,默认true
[[Value]]:属性的值,默认为undefined
ES5定义了一个Object.defineProperty()方法来修改这些这些默认特征,请记住这个方法
方法接受三个参数:对象名称,属性名称及描述符,eg:
var person={}
Object.defineProperty(person,"name",{
writable:false,
value:"Lucy"
});
console.log(person,name)//"Lucy"
person,name="Bob"
console.log(person,name)//"Lucy" 在严格模式下会报错
2.访问器属性
访问器属性同样包含4个特征
[[configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为false
[[enumerable]]:表示能否通过for-in循环返回属性,默认为false
[[Get]]:在读取属性时调用的函数,默认值为undefined
[[Set]]:在写入属性时调用的函数,默认值为undefined
访问器属性跟数据属性不同,不能在创建函数的时候直接定义,只能通过Object.definedproperty()来定义,
这边懒得写了,借用别人的图片展示一下
打印结果
特别要注意,数据属性和访问器属性除了定义方式不同,其两个特征的默认值也是不同的。