作用域、作用域链精解、立即执行函数、闭包、对象、包装类
- 立即执行函数(function (形参) {函数内容}(实参));
- 闭包 => 函数在子作用域被return 到外作用域导致的内存泄漏问题
- 对象:表达式=>可直接添加属性,如text.name等
- 包装类就是在给变量(无属性)赋属性的时候会new一个新变量对其赋值,然后在delete,无法对原值进行操作
原型、原型链、call/apply、继承模式、命名空间、对象枚举
- 原型=> 对象.prototype
先在原对象查询属性,查不到就通过__proto__索引继承原型属性 - call 需要把实参按照形参的个数传进去,apply 需要传一个arguments(数组)
call/apply 作用:改变 this 指向,区别:传参列表不同
call(需要替换 this 的对象,形参)、apply(需要替换 this 的对象,[形参]) - 命名空间:管理变量,防止污染全局,适用于模块化开发
利用闭包和函数继承时,可以保护全局变量不受改变 - 对象枚举:在枚举对象里属性的时候可以用 for( var prop in object ) 循环来遍历
- hasOwnProperty(prop)返回 true 则为自己的属性,false 则非自己的属性
- A instanceof B => A 对象是不是 B 构造函数构造出来的(官方定义)
=> 看 A 对象的原型链上有没有 B 的原型(理解)
this、arguments、克隆、三目元算符、数组、类数组
- this : (1). 函数预编译过程 this => window
(2). 全局作用域里 this => window
(3). call / apply 可以改变函数运行时 this 指向
(4). obj.func(); func()里面的 this 指向 obj - 克隆:浅层克隆 => 深层克隆
- 数组:常用的方法:(1). 改变原数组:push => 末尾加
pop => 末尾减(只能单位操作), 相当于剪切操作
shift => 首位加(可多位操作)
unshift => 首位减, 相当于剪切操作
reverse => 逆转数组顺序
arr.splice(从第几位开始,截取多少的长度,在切口处添加新的数据)
arr.sort( function () { return ; } ) 返回值负数前面的在前面,返回值为正数后面的在前面,返回值为零不动
(2). 不改变原数组:arr.concat( arr1 ) => 把 arr1 接在 arr 后面
toString:把数组变成字符串展示出来arr.slice(从该为开始截取,截取到该位)
arr.join(’-’):[1 , 2] => “1-2”
str.split(’-’):“1-2” => [“1” , “2”] - 类数组:属性要为索引(数字)属性,必须有 length 属性,最好加上 push
(1). 可以利用属性名模拟数组特性
(2). 可以动态的增长 length 属性
(3). 如果强行让类数组调用 push 方法,则会根据 length 属性值的位置进行属性的扩充
try…catch、es5标准模式
- try { } catch (error) { }:在 try 里面发生的错误,不会执行错误后的 try 里面的代码
error.name => 错误名称
error.message => 错误信息
error.name 的六种值对应的信息:
(1). EvalError:eval() 的使用与定义不一致
(2). RangeError:数值越界
(3). ReferenceError:非法或不能识别的引用数值
(4). SyntaxError:发生语法解析错误
(5). TypeError:操作数类型错误
(6). URIError:URI处理函数使用不当 - es5.0严格模式:启动方法"use strict"
- eval (’ '):将字符串当代码来运行,但是 es3.0 都不能使用 eval();
获取窗口属性、获取dom尺寸、脚本化CSS
- document.style => 获取和改变行间样式
- window.getComputedStyle(ele, null);计算样式只读,返回的计算样式的值都是绝对值,没有相对单位,且IE8及IE8以下不兼容