JavaScript的简单类型包括
1.数字number
JS不分整形和浮点型,都是number类型
两个浮点数相加,精度不够
2.字符串 string
3. 布尔值 boolean
4. null
5. undefined
以上是五种简单数据类型,其余的是复杂对象、Function、Array
研究一个前五个貌似是对象,因为他们拥有方法,但是他们是不可变的?
简单数据类型,不是对象?
JavaScript复杂类型----对象
在JavaScript中的对象是可变的键控容器,包括数组,函数,正则表达式等。
对象是属性的容器,每个属性都拥有名字和值,属性的名字可可以是包括空字符串在内的任意字符串,值可以是除undefined之外的任意值。
对象可以嵌套
var s={
birthday:'2001-2-9',
sex:'boy',
name:{
firstname:'li',
lastname:'shuaibi'
}
};
检索
检索两种方式,如果检索一个并不存在的属性值则返回underfined
1、s.[“birthday”]
2、s.birthday
引用
var x=stooge;
x.nickname='Curly';
var nick=stooge.nickname;
//因为x和stooge是指向同一个对象的引用,所以nick为'Curly'
对象通过引用来传递
var a={},b={};
//a,b,c都引用一个不同空对象
var a=b=c={};
//a,b,c都引用同一个对象
原型
每个对象都有一个原型对象,可以从中继承属性,每个对象都连接到Object.prototype。
引用类型,隐式原型 proto 的属性值指向它的构造函数的显式原型 prototype 属性值----obj.proto=Object.prototype
使用原型的好处:当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到直接使用
以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了
function gg () { }
//给gg函数的原型对象中添加一个属性 name并且值是 "张三",age值为20
gg.prototype.name = '张三';
gg.prototype.age = 20;
let g1 = new gg();
console.log(g1.age); //20
原型连接在更新时不起作用,
Object的prototype的隐式原型_proto_属性为 null,设计上是为了避免死循环而设置的, Object.prototype 的隐式原型指向 null