标签:
类型
原始(值)类型 undefined null true “hello”123
对象(引用)类型 Object var obj={};var arr=[];var date=new Date();
原生对象分为:
构造函数
Boolean、String、Number、Object、Function、Array、Date、RegExp、Error;
对象
Math、Json、全局对象、arguments;
宿主对象
window、document、navigator...
原始类型和对象类型区别
类型转换
隐式类型转换
- 数字运算符
当数字与字符串相加时,数字会被隐式的转换成字符串
当数字与字符串相减时,字符串会被隐式的转换成数字
- .
所有的直接量用.号去调用方法时,JS运行环境会将直接量转换成相应的对象类型,去调用对象类型上的方法来实现功能
- if
if语句的条件部分,系统会将表达式结果隐式的转换成布尔值来进行判别是否需要运行if后面的语句
- ==
所有对象转换成布尔值时结果都是true
显式类型转换
- Number(),String(),Boolean()
- parseInt()取整,parseFloat()取浮点数
- !,!!
类型识别
typeof 操作符(number,string,boolean,undefined,object)
可以识别标准类型(Null除外)
不能识别具体的对象类型(Function除外)
instanceof(true/false)
可以判别内置对象类型
不能判别原始类型
可以判别自定义对象类型及父子类型
Object.prototype.toString.call 借用object原型链上toString的方法来实现类型识别的功能(“[object number]” “[object string]”)
可以识别标准类型以及内置(build-in)对象类型
不能识别自定义对象类型
constructor 生成对象的构造函数的函数本身(true/false)
可以判别标准类型
可以判别内置对象类型
可以判别自定义对象类型
getConstructorName获取对象构造函数的名称
函数定义
- 函数声明
function add(i,j){
return i+j;
}
- 函数表达式
var add = function(i,j){
return i+j;
};
- 函数实例化
var add = new Function("i","j","return(i+j)");
区别
函数声明定义函数的特点
1:函数定义会被前置
2:重复定义函数时,最后一次定义有效
函数实例化定义函数的特点
1:定义的函数只能访问本地作用域和全局作用域
函数调用
普通函数调用模式 add1(1);
方法调用模式
构造函数调用模式 new Funtion(...);
apply(call)调用模式
函数调用模式的区别
普通函数调用模式
-this指向全局对象
方法调用模式
-this指向调用者
构造函数调用模式
-this指向被构造的对象
apply(call)调用模式
-this指向第一个参数
原始类型按值传递 -call by value 函数内的参数改变 不影响全局参数
按引用传递 -call by reference 函数内的参数改变 会影响全局参数
对象类型按共享传递
类
从抽象到具体
原型
从具体到具体
设置对象的原型
Object.create(proto)
- proto一个对象,作为新创建对象的原型
构造函数
- 使用prototype设置原型
- 使用new创建对象
原型链
变量作用域
静态作用域
又称词法作用域
由程序定义的位置决定
动态作用域
程序运行时刻决定
Js变量作用域
Js使用静态作用域
Js没有块级作用域(全局作用域、函数作用域等)
ES5中使用词法环境管理静态作用域
词法环境 - with
闭包的应用
保存现场
addhandlers(nodes)
封装
优化性能
Js面向对象编程
全局变量
var text = ‘some value‘;
window.text = ‘some value‘; 可使用delete删除
(function(){
var a;
text = ‘some value‘;
})(); 可使用delete删除
标签:
原文地址:http://www.cnblogs.com/nieying/p/5611656.html