20150814 JavaScript深入浅出下
来源:互联网 发布:淘宝网买手机壳 编辑:程序博客网 时间:2024/06/06 03:49
对象
对象包含一系列属性,这些属性是无序的。每个属性都有一个字符串key和对应的value。key是字符串,即使不是也会toString
对象结构:属性标签(writable/enumerable/configurable/value/get/set) [[proto]]原型-》原型链。。。[[class]] [[extensible]]
delete只能删除对象上的属性,不能删除原型链上的属性
数组
数组是值的有序集合。每个值叫做元素,每个元素在数组中都有数字位置编号,也就是索引。JS中的数组是弱类型的,数组中可以含有不同类型的元素。数组元素甚至可以是对象或其它数组。稀疏数组并不含有从0开始的连续索引。一般length属性值比实际元素个数大。
数组和一般对象相比
相同点:都可以继承。
数组是对象,对象不一定是数组。
都可以当做对象添加删除属性。
不同点:数组自动更新length
按索引访问数组常常比访问一般对象属性明显迅速。
数组对象继承Array.prototype上的大量数组操作方法
函数和作用域
函数是一块JavaScript代码,被定义一次,但可执行和调用多次。
JS中的函数也是对象,所以JS函数可以像其它对象那样操作和传递,因此我们也常叫JS中的函数为函数对象。
函数名+参数列表+函数体
this指向
全局对象:在浏览器中是window,在nodejs中是global
1、全局的 this指向全局对象
2、一般函数的 this指向全局对象 严格模式下的this指向undefined
3、作为对象方法的函数 this指向对象
4、对象原型链上的this指向对象
5、get/set方法中的this指向对象
6、构造器中的this指向对象
7、函数的call/apply方法中的this指向对象
8、函数的bind方法中的this指向对象
函数属性&arguments
Arguments是个类似数组但不是数组的对象,说他类似数组是因为其具备数组相同的访问性质及方式,能够由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。还有就是arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,而且不能显式创建 arguments 对象。
foo.name--‐函数名 foo.length--‐形参个数 arguments.length--‐实参个数
未传参数,失去绑定关系,穿参数,存在绑定关系;严格模式下,绑定关系消失,arguments.callee不能使用。
apply/call方法
apply()null/underfined指向全局对象、true指向Boolean(true) 严格模式下传入什么就是什么
bind方法 改变函数运行时的this
bind与currying 函数拆分实现颗粒化
bind与new 将this初始化为空对象,执行赋值语句,忽略return语句。
作用域
JS没有块级作用域,全部都是全局作用域
函数有独立的作用域,利用函数作用域封装:(function() { var a, b;})(); !function() {var a, b;}();
eval特殊的作用域
作用域链,除了new Function()
不同调用方式
直接调用 foo()、对象方法 o.method()、构造器 new Foo()、call/apply/bind func.call(o);
不同创建方法:函数声明、函数表达式、函数构造器
函数声明eg function add(){};
函数表达式eg var add=function(){}; (function(){})(); return function(){}; var add=function foo(){};
函数声明和函数表达式的区别:
函数声明会被前置,也即在函数声明之前调用函数不会出错,在函数表达式之前调用函数会出错TypeError。
命名函数表达式:var add=function foo(){}; alert(func===nfe); IE6-8false、IE9+报错:nfe is undefined 可递归调用 var func=function nfe(){nfe();}
函数构造器var func=new Function('a','b','console.log(a+b);');很少使用
在计算机科学中,闭包(也称词法闭包或函数闭包)是指一个函数或函数的引用,与一个引用环境绑定在一起。这个引用环境是一个存储该函数每个非局部变量(也叫自由变量)的表。
闭包,不同于一般的函数,它允许一个函数在立即词法作用域外调用时,仍可访问非本地变量。
闭包的优缺点 优点:灵活和方便、封装;缺点:空间浪费、内存泄漏、性能消耗。
变量对象(VariableObject,缩写为VO)是一个抽象概念中的“对象”,它用于存储执行上下文中的:1.变量 2.函数声明3.函数参数
变量初始化阶段----变量对象按照如下顺序填充:
1.函数参数(若未传.入,初始化该参数值为undefined)
2.函数声明(若发.生命名冲突,会覆盖)
3.变量声明(初始化变量值为undefined,若发.生命名冲突,会忽略。)
OOP JS面向对象编程
OOP特性:继承、封装、多态、抽象
正则表达式
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
eg:abc [a-z]{4} \d\d\d
/\d\d\d/.test("123")//true
/\d\d\d/.test("abc")//false
new RegExp("BOSN").test("Hi,Bosn")//true
特殊字符转义\
三个flag global匹配到所有的情况 ignoreCase不区分大小写 multiline跨行与否 设置/abc/gim.test("ABC");gim===global+ignoreCase+multiline RegExp("abc","mgi") mgi===multiline+global+ignoreCase
RegExp对象属性global/ignoreCase/multline/source
RegExp对象方法compile改变正则的规则和属性/exec匹配,返回相同的结构/test/toString
string类型与正则相关的方法 String.prototype.search位置 String.prototype.replace替换 String.prototype.match返回相同的部分 String.prototype.split分割
0 0
- 20150814 JavaScript深入浅出下
- 深入浅出Javascript
- 深入浅出javascript DOM编程
- 深入浅出JavaScript—ECMAScript
- 深入浅出 JavaScript 中的 this
- 深入浅出JavaScript笔记
- 深入浅出 JavaScript 中的 this
- 深入浅出JavaScript闭包
- 深入浅出 JavaScript 中的 this
- 慕课网深入浅出javascript
- 深入浅出 JavaScript 中的 this
- 《JavaScript深入浅出》学习笔记
- 深入浅出 JavaScript 中的 this
- 深入浅出 JavaScript 中的 this
- JavaScript深入浅出之函数
- 深入浅出 JavaScript 中的 this
- 深入浅出 JavaScript 中的 this
- JavaScript 深入浅出 1 数据类型
- 在Parallels Desktop上安装Win8虚拟机
- 基于OC的HTML解析4—获得指定标签的层次结构
- Java web学习路线
- poj3101--Astronomy(分数的最小公倍数)
- linux找不到动态链接库 .so文件的解决方法
- 20150814 JavaScript深入浅出下
- C++11新特性之std::bind与std::function
- hdoj.4404 Worms【计算几何+圆与多边形相交面积】 2015/08/17
- 浮点与定点的转换
- 对 zebra 的一点理解 thread+socket+read部分 (备忘)
- 算法竞赛入门经典:第五章 基础题目选解 5.12多少块土地
- 杭电1596find the safest road
- Curling 2.0(POJ--3009
- 从下载MODIS数据到几何纠正