1.数据类型
1.0 关键字
- 对象:{} 属性和方法的集合(变量和function的集合),一个对象类型的实例,通过函数创建。对象都有一个__proto__属性,指向这个对象的构造函数的原型对象(prototype属性)。
- 对象的属性有权限,例如能不能被delete,可以查看
- 变量就是基本类型的实例, var a =1: a不能被delete 隐性申明:a=1:a可以被删除
- 可以在添加对象的属性时给它赋予属性
- 对象也拥有标签,可以通过Object来定义对象的权限:不能添加属性,不能删除修改等等
- 类型: 对象类型和原始类型,类似于java的类
- 构造函数: 和普通函数写法没区别,首字母大写,使用 new + 构造函数名(实参) 来批量创建对象,是继承的必经之路
- 原型对象:该对象的父类,函数都有一个prototype属性,指向原型对象(原型对象在定义函数时同时被创建)
- this
- 一般window对象
- 在对象的函数里 指向当前对象
ps :__proto__和prototype属性的值都指向原型对象,一个是对象的属性,一个是函数的属性
1.1 === 和 ==
=== :
- 类型不同 返回false 类型相同
- 类型相同,值也相同,大部分返回 true,也有特例。
特例:
- null === null //true ; unefined === undefined //true
- NaN === NaN //false NaN是一种特殊的number类型 ,和任何类型 === 都返回false
- new Object === new Object // false 对象比较引用,除非两边是同一对象引用才会返回 true
==:
- 类型相同 和 === 一样
- 类型不同,先尝试转型,再进行比较,具体问题遇到再查询
1.2 包装对象机制
var a = “string”;
alert(a.length); //6
a.t = 3;
alert(a.t); //unefined
基础类型a能够访问对象才有的a.length属性,是因为 js 给你做了一步操作:
var aa = new String(a),然后通过 aa这个临时的对象去访问属性,但是这个对象在执行完a.length会立刻销毁,所以访问a.t是unefined
1.3 类型检测:
typeof : 一个一元运算,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。
- 不够精细,只能返回类型,如果要获取 Array 而非 Object 则实现不了,不能判断具体引用类型,但是为什么能拿到function对象
- 遇到null失效
instanceof : 操作符, a instanceof Obiect ,左边必须是对象,否则返回false。
- 比typedef 更细,判断左边对象a的原型链(继承)的原型(父类)是否有右边这个构造函数的prototype对象属性
- 不可以跨ifram,window对象使用
- 简单来说就是判断该对象是哪种引用类型
Object.prototype.tostring.apply():
- 既能判断基本类型,也能判断引用类型(对象类型)
- 遇到Null,undefined会在IE678失效
1.4 js对象序列化
- 将js对象转化成字符串
- 通过JSON.stringify(obj) 实现
- jequery ajax请求 自动将对象序列化了
- JSON.parse('{"x":1}') 将字符串转化为json格式对象
- js对象自定义序列化:
- 对象内添加toJSON函数
1.5 表达式
- for in 遍历对象