- 一、JavaScript的简单类型包括
1.数字 number
J s 不分整型与浮点型
两个浮点相加,精度不够
2.字符串 string
3.布尔值 boolean(true和false)
4.null
5.undefined(没有确定的属性类型)
以上都是简单数据类型
其他都是对象 Function Array
研究一下 前五个貌似是对象,因为他们拥有方法,但是他们是不可变的?
简单数据类型,不是对象?
-二、JavaScript的对象
1.JavaScript的对象是无类别的可变的键控集合,也是属性的容器。
2.对象字面量
对象字面量是一种非常方便地创建对象值的表示法
var a = {
name: "陈juju";
stature:'173',
gender:"男",
}
console.log(a)
对象也可是嵌套的
var school = {
grade:"二年级",
class:"一班",
student 1 = {
name:"橙子",
gender:"男",
stature:"170",
},
student 2 = {
name:"小颖",
gender:"女",
stature:"160",
}
}
3.检索
要检索对象中的值,可以采用在[]将要检索的属性括住,也可以用.表示法代替。优先考虑用.表示法,因为它更紧凑且可读性更好
当检索一个并不存在的成员元素的值,将返回一个 undefined值
|| 运算符可以用来填充默认值
当尝试检索一个undefined值会导致TypeError异常,这可以通过&&运算符来避免错误
console.log(school.student3) //undefined
console.log(school.student3.name) //TypeError
console.log(school.student3) && console.log(school.student3.name) //undefined
4.更新
对象的值能通过赋值语句来更新,如果属性名已经存在在对象中,那么这个属性的值将会被替换
a.name="陈橙"
console.log(a.name); //陈橙
如果对象之前不存在该属性名,那么该属性就会被扩充到对象中
a.hometown="江西"
console.log(a.hometown); //打印出江西 这是之前a对象中没有的属性,所以被扩充到了a对象中
5.引用
对象通过引用来传递,他们将永远不会被拷贝
var x = "a";
x.name = "陈橙";
var z = a.name;
console.log("z') //因为a和x是同一个对象的引用,所以打印出陈橙
6.原型
每个对象都连接到一个原型对象,并且可以从中继承属性,所有通过对象字面量创建的对象都连接到object.prototype 这个JS标准的对象
当你创建一个新对象时,你可以选择某个对象作为它的原型。
原型连接在更新时是不起作用的,当我们对某个对象做出改变时,不会触及到该对象的原型。
原型关系是一种动态的关系,如果我们添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的对象可见。
7.反射
检查对象并确定对象有什么属性是一件很容易的事情,使用Typeof能够有效的帮助我们确定对象的类型
Typeof a.name // 'string'
Typeof a.stature //'number'
但是原型链中任何属性也会产生一个值
Typeof a.age // 'function'
Typeof a.tall //'function'
有两个方法处理这些不需要的属性
第一种是让你的程序检查并剔除函数值
第二种是用hasOwnproperty 方法
如果对象拥有独立的属性那么将会返回ture,hasOwnproperty方法不会检查原型链
a.hasOwnproperty('name') //true
a.hasOwnproperty('age') //false
8.枚举
枚举就是将对象中的属性一 一列举出来
我们应该创建一个数组,用for语句将属性列举出来
var i ;
var a = {
grade:"二年级",
class:"一班",
name:"橙子",
gender:"男",
stature:"170",
},
var b ={
"二年级",
"一班",
"橙子",
"男",
"170",
}
for(i=0;i<length.school;i++)
document.writeln(a[i]+":"b[i]);
通过for可以得到我们想要的值,而不用担心发掘出原型链中的属性,并且能够按时我们需要的顺序取得他们的值
9.删除
delete可以用来删除对象中的属性,但是它不会触及原型链中的任何对象
console.log(a.name) //'陈橙'
//删除a.name中的属性,将会显现出a.name中的原型属性
delete a.name
console.log(a.name) //"陈juju"
10.减少全局变量污染
JavaScript中可以很随意定义那些可以应用资源的全局变量,但是全局变量削弱了程序的灵活性,我们应该避免
我们应该只创建一个全局变量
var MYschool{}
此时变量变成了我们的应用容器
MYschool.a = {
grade:"二年级",
class:"一班",
name:"橙子",
gender:"男",
stature:"170",
},
MY.school = {
grade:"二年级",
class:"一班",
student 1 = {
name:"橙子",
gender:"男",
stature:"170",
},
student 2 = {
name:"小颖",
gender:"女",
stature:"160",
}
}
将多个全局变量定义在一个名称空间下,将会降低与其他应用程序的产生糟糕的相互影响的可能性,也能够使你的程序变得更容易读懂。