码迷,mamicode.com
首页 > Web开发 > 详细

JS进阶

时间:2016-06-23 18:33:33      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

类型
原始(值)类型 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删除

 

JS进阶

标签:

原文地址:http://www.cnblogs.com/nieying/p/5611656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!