普通---当即执行 async---异步加载,当即执行,不按照顺序执行 defer---异步加载,最后执行 <noscript>
数据类型json
number NaN---未知的数值 经过inNaN(判断是否能转化为数值)来判断 infinity 指数形式:aE+n a乘10的n次方,11E-3 ===> 11*10^-3 = 0.011 undefined---未定义 null---空对象指针 string boolean object typeof操做符:undefined boolead string number object(null) function 基本转义字符 \n换行,\b空格
控制结构windows
1.do-while 先执行,再判断 2.while 判断再执行 3.for ---都是为假就跳出循环 4.for-in-迭代读取对象的key,可能不会按照顺序读取... 5.label,break,continue 6.with---将代码的做用域设定到特定对象中 with(a){ var x=b; var y=c; }---将做用域设定到a对象中; 等同于 var x=a.b; var y=a.c; 7.switch case x : 语句;break; default: 语句;
变量,做用域和内存数组
变量类型: 基本类型---简单数据段 引用类型---对象类 1.对于直接赋值 a=b 基本类型传递值 引用类型传递指针,因此改变b,a会改变; 2.对于向函数传递参数 都是传递值; 执行环境及做用域 function a(){ function b(){ } } 环境栈: ↓ b的环境对象---活动对象,包括arguments变量 a的环境对象---第二级做用域 window---全局做用域
引用类型浏览器
经过new或者字面量的形式建立 公共方法: tostring() tolocalstring() valueof() 引用类型包括如下几类: 1.object 2.array 3.date 得到时间 var now = new Date; 而后经过getTime()等方法 建立时间 var dateTime = new Date("2016/05/20 23:42:00"); 4.RegExp 5.Function 6.包装类型-boolean,string,number --- var a='xx'; var b=a.length; b=2; 至关于: var a='xx'; a1=new string('xx'); b=a1.length; a1=null; 基本数据类型能使用方法,是由于转换成了这些包装类型,而后当即被释放; a.color='red';---a变成包装类型string,添加属性color,而后被释放 alert(a.color);---undefined,又变成了基本类型. --- var value='1'; Number(value);---转换函数,转成数值 new Number(value);---构造函数,构造了一个包装类型 7.单体内置对象 Global 全局对象---最底层的对象---没有直接调用的方法,只有经过window对象调用 window对象是Global(js语法中的最底层对象)与浏览器对象之和; Math
对于一个属性--由一个name,6个特性组成; 可配置性 configurable ---可否delete删除;可否修改特效;可否设置为访问器属性; 可枚举性 enumerable---可否for-in 数据属性: 可修改性 writable 数值 value---默认undefined 访问器属性:(es5标准,ie8及如下没有--主要 适用与移动端); set get 前三个特性,默认true,可是若是开始设置,任意一个特性,其他的默认false; 数据属性和访问器属性不能混用; var a = {}; Object.defineProperty(a,"name",{ value:"lh", writable:false --- 这个时候,其他两个属性设置为了false; }) var b = Object.getOwnPropertyDescriptor(a,"name"); 获得特性名=>值组成的对象; Object.defineProperty(a,"name",{ set:function(e){ this.name=e+1; } 设置多个属性 Object.defineProperties(a,{ name:{}, vale:{} }) Object模式 var x = new Object() x.name=''; ... 对象字面量 var x = { name:'', ... } 工厂模式 function x (){ var o = new Object(); o.name=''; ...; return o; } 构造函数 function x(){ this.name=''; } var y =new x (); 除了构造函数,这几种方法原型链都是 对象--对象原型(Object.prototype)--null 构造函数是 实例化的对象(y)--实例原型(y.__proto__/x.prototype)--对象原型(Object.prototype)--null function a(){ this.fn=function(){} }---构造函数a中建立一个方法fn; var b1 = new a(); var b2 = new a(); 这个时候 b1.fn并不等于b2.fn; 要他们共用一个方法,要将方法放在原型a上; a.prototype.fn = function(){...}; ---------------------------------------- 实际使用: function student(){ this.name=prop.name||"匿名"; }; student.prototype.fn=function(){...}; function createstudent(prop){ return new student(prop||{}); } ---而后直接用 var xiaoming = createstudent();来建立 1.不要new 2.传参数不用管顺序,和有没有,还能设置默认值... 3.彻底匹配json数据; var x = createstudent({ "name":"xiaoming", ... }) function mor(obj) { var rs = []; while(obj) { rs.push(obj); obj = Object.getPrototypeOf(obj); } return rs; } 原型上的变量,实例中赋值后,变成不继承了??--继承,可是优先级不一样 q.hasOwnProperty("vv") true w.hasOwnProperty("vv") flase -- 在q中添加了vv属性,由于调用是从上至下的,因此如今实例中查找,再去原型-- 能够经过delete q.vv;而后调用的又是原型中的了. function empty(){};?? 实例a 构造函数b 原型c --------------------------------------------------------------------------------------------- constructor b functon Function(){} b ----------------------------------------------------------------------------------------------- prototype undefine c undefine ----------------------------------------------------------------------------------------------- __proto__ c function Empty(){} Object ----------------------------------------------------------------------------------------------- __proto__才是原型,继承. 定义函数时,就会有construct和prototype出现 函数的原型是个空对象,继承自Object; new的做用是将this绑定? ------------------------------------------------------------------------------------------------ 构造函数模式+原型模式实际运用 var prop = { name:"gou", cat:"miao" } function a(){ this.cat=prop.cat||'mao' }; a.prototype={ constructor:a, 创建对象的时候,设置原型的时候.只能单个设置 eg: a.prototype.name:'="name', say:function(){ return this.say+this.name; } } function createA(){ return new a (prop||{}) } var b = createA(prop); 稳妥构造模式 function a (){ var o = new Object(); name="xx"; o.sayname=function(){ alert(name); } return o; } 适应在须要安全的地方--除了o.sayname方法,没法访问内部属性;
闭包: 能访问函数内部. 匿名函数的返回--- function a(x){ var t='he'; console.info(x); return function (x){ console.info(t,x,this); } } var b=a('he');---'he',b=function(){...};this指向windows,可是环境仍然为a; 能访问到t,x又做为匿名函数的参数了,因此如b不赋值,则为undefined; b('he');---'he,he,window'; 严格模式下,不能使用arguments.callee; var a = (function b(){})---用来内部调用本身; 闭包用途: function a(){ var x=1; add=function(t){ x=x+t; console.info(x); }; return function b(){ x++; console.info(x); }; } var b=a(); b();2 b();3 add(1);5 ---经过闭包,b函数赋予给全局变量b,b函数又依赖a,因此将a环境一直保存在内存中了... add没用var建立,因此是个能访问a内部的全局函数,能够用来设置a内的变量;
因此抛出的错误都是error对象的实例
error对象: message:错误提示信息 name:错误名称(非标准属性) stack:错误的堆栈(非标准属性) 派生的六种对象 1.syntaxError---语法错误 2.refrenceError---引用了不存在的变量 3.rangeError---超出范围 4.typeError---使用变量或参数不是预期类型 5.URIError---URI相关函数的参数不正确 6.EvalError---Eval函数没有正确执行 自定义错误: function a(){} a.prototype=new Error; a.contructor=a; var b=new a; throw语法 throw抛出一个对象,而后中断 try{} catch(){} finally{} 执行try中的语句,若是完成,执行finally语句 若是错误,catch捕获错误(不抛出错误),而后执行catch语句,再finally语句
```
操做符
typeof---主要检测基本类型
instanceof---主要检测引用类型 检测对象的cunstructor
1.Object
实例 instanceof 原型
Object.getPrototypeOf() 得到对象的原型
Object.constructor 对象的构造函数
Object.hasOwnProperty( ) 检查属性是否被继承
Object.isPrototypeOf(a) 一个对象是不是另外一个对象的原型 (a原型链上是否有Object);
Object.propertyIsEnumerable( ) 是否能够经过for/in循环看到属性
Object.toLocaleString( ) 返回对象的本地字符串表示
Object.toString( ) 定义一个对象的字符串表示
Object.valueOf( ) 指定对象的原始值
2.Array
Array.concat( ) 链接数组
Array.join( ) 将数组元素链接起来以构建一个字符串
Array.length 数组的大小
Array.pop( ) 删除并返回数组的最后一个元素
Array.push( ) 给数组添加元素
Array.reverse( ) 颠倒数组中元素的顺序
Array.shift( ) 将元素移出数组
Array.slice( ) 返回数组的一部分
Array.sort( ) 对数组元素进行排序
Array.splice( ) 插入、删除或替换数组的元素
Array.toLocaleString( ) 把数组转换成局部字符串
Array.toString( ) 将数组转换成一个字符串
Array.unshift( ) 在数组头部插入一个元素
Array.安全
3.Boolean
Boolean.toString( ) 将布尔值转换成字符串
Boolean.valueOf( ) Boolean对象的布尔值
4.Function
Function.apply( ) 将函数做为一个对象的方法调用
Function.arguments[] 传递给函数的参数
Function.call( ) 将函数做为对象的方法调用
Function.caller 调用当前函数的函数
Function.length 已声明的参数的个数
Function.prototype 对象类的原型
Function.toString( ) 把函数转换成字符串
5.Number
Number.MAX_VALUE 最大数值
Number.MIN_VALUE 最小数值
Number.NaN 特殊的非数字值
Number.toLocaleString( ) 把数字转换成本地格式的字符串
Number.toPrecision( ) 格式化数字的有效位
Number.toString( ) 将—个数字转换成字符串
Number.valueOf( ) 返回原始数值
6.String(字符串对象)
String.charAt( ) 返回字符串中的第n个字符
String.charCodeAt( ) 返回字符串中的第n个字符的代码
String.concat( ) 链接字符串
String.indexOf( ) 检索字符串
String.lastIndexOf( ) 从后向前检索一个字符串
String.length 字符串的长度
String.localeCompare( ) 用本地特定的顺序来比较两个字符串
String.slice( ) 抽取一个子串
String.split( ) 将字符串分割成字符串数组
String.substr( ) 抽取一个子串
String.substring( ) 返回字符串的一个子串
String.toLocaleLowerCase( ) 把字符串转换小写
String.toLocaleUpperCase( ) 将字符串转换成大写
String.toLowerCase( ) 将字符串转换成小写
String.toString( ) 返回字符串
String.toUpperCase( ) 将字符串转换成大写
String.valueOf( ) 返回字符串
7.其余
parseInt(x,16/10/8) --- 若是x=08 有没有指定radix 那就会输出8进制
parseFloat(x,16/10/8)
isNaN()
isFinite() 检测是否是infinity与NaN
escape() 对整个字符串进行转义 (% ? 等在url中有意义的也会被转义)
encodeURI() 对URL进行转义(只会对参数) --- decode...反转义
encodeURIComponent() 对整个url转义(当url做为参数时,如跳转)闭包