ES5基础部分
javascript是区分大小写的弱类型语言;
- es的基本类型是:undefined ,null ,boolean ,number ,string
- typof是检测基本类型的:undefined,boolean,number,string,object,function
- js不能用来计数运算,
var n1=0.1;var n2=0.2; console.log(n1+n2!=0.3)
- NaN不与任何值相等,isNaN在接收到值后会尝试将其转换为数值,否则是ture;
isNaN("test");//console.log(true)
- 数值的转换方法:Number(),parseInt(),parseFloat();//parseInt("")返回NaN,Number("")返回0
- 引用类型:object,array,date,regexp,function
数组
一般方法有:Array.isArray(),join(),split(), posh()/pop(),unshift()/shift() , indexof,lastIndexof
会改变原数组方法:reverse(),sort(),splice()
返回新数组:concat(),slice(start,end);
迭代方法:every() , some() , filter() , map(), forEach(), reduce(function(prev,cur,index,arr)),reduceRight()
函数(function)
函数属性:arguments,callee,caller是调用当前函数的函数引用
改变上下文环境:apply(),bind(),call();
字符串string
方法:concat(),slice(),substring(start,end) ,substr(start,count),indexof,lastIndexof, trim();
Math.ceil()向上,Math.floor()向下, Math.round()四舍五入, Math.random()随机值
面向对象
Object.defineproperty(o,name,config),Object.defineproperties()
config包括:configurable,enumerable,writable,value,
访问器属性:getter(),setter(),configurable,enumerable
以上用来控制对象属性的行为(底层)
创建对象:
- 工厂模式:创建了多个相似对象,但无法识别对象
function Person(name,age){
var o=new Object();
o.name=name;
o.age=age;
return o;
}
- 构造函数模式:可识别对象,但其每个对象方法是独立的
function Person(name,age){
this.name=name;
this.age=age;
this.sayname=function(){return this.name}
}
- 原型模式: 解决了方法共用,但都会取得相同的属性
function Person (name,age){
}
Person.prototype={}
Object.hasOwnProperty只能检测实例属性,in操作符可以检测实例属性和原型属性
4.组合模式(省...)
继承:
- 原型链:sub.prototype=new super();
- 借用构造函数:
function Sub(){
Super.call(this);
}
组合式继承...最大问题是会2次调用超类型的构造函数
- 原型式继承: Object.create()就是这种,对其原型进行复制
function Foo(o){
function T(){}//过渡函数
T.prototype=o;
return new T();
}
- 寄生式继承
function cc(origin){
var clone=Foo(origin);
clone.sayname=fucntion(){}//对其进行扩展
return clone
}
5.寄生组合继承:解决组合式继承的问题
function NN(sub,super){
var pro=Foo(super.prototype);
pro.constructor=sub;
sub.prototype=pro;
}//只复制其原型上面的属性,而sub.prototype=new super()则会都复制包括实例属性
super.call(this);