1.在函数内部没有用var来创建变量时,该变量默认为全局变量,所以在函数内部定义变量要使用var,防止一些莫名其妙的问题。
2.js中强制类型转换Number(),如果强制转换一个非数值类型的值会得到一个NaN的值(not a number)
parseInt(a)可以转换以数字开头的字符串,将前面数字部分转化为数字;开头若是字符,则得到一个NaN
var a="11";
alert(a);
alert(Number(a)+1)
3.判断是否属于某种类型用
alert(typeof a) //打印a 的类型
alert(a instanceof Array) //判断a是否是array类型
4.在布尔类型中,非0即是true,除外:NaN、
undefined。当一个变量没有定义的时候,是undefined。
alert(!!NaN)
var size;
alert(!!size)
5.面向对象有两种概念:基于类的、基于原型拷贝的。
js中类可以这么写:就是一个普通方法。方法内不用this声明的时候,函数永远不会把它当做为一个方法或属性。
function person(name,age) {
this.name=name;
this.age=age;
this.add="北京";
}
var a=new person('林木','23');
alert(a.add+a.name+a.age);
除了a.add这种方式调用,还可以使用 a["name"]
可以通过for(var el in a){}来遍历a中的所有属性(
显示声明的属性
)
for ( var e in a) {
alert(e+":"+a[e])
}
6.常用的对象:
(1)data对象
var d=new Date();
document.write(d.getFullYear()+'年'+d.getMonth()+'月'+d.getDate()+'日'+'星期'+d.getDay());
(2)string对象
var a=new String("sasas");
alert(a)
var b=a.
concat
('abd');
substr
(a,b) //从a开始取5个字符
substring
(a,b)//从a开始到b结束
(3)array对象
1)var a=new Array();
a.push("aaa");
a.push("ddd");
alert(a)
2)var a=new Array(11,22,123,'122');
3)b=[11,22,13,'2122'];
数组转字符串:a.join(',');
(4)number
(5)math
7.计时
setTimeout("big()", 3000)
setInterval("big()", 3000)
8.dom模型;
document object model
9 工厂的方式创建类//无法检测所创建对象的数据类型 只能 typeof
function createperson(name,age) {
var o=new Object();
o.name=name;
o.age=age;
o.say=function(){
alert(this.name+":"+this.age);
}
return o;
}
var p=createperson("linmu", "aaa");
p.say();
10.构造函数的方式创建类
function createperson(name,age) {
this.name=name;
this.age=age;
this.say=function(){
alert(this.age+this.name);
}
}
var p=new createperson("linmu", "11");
p.say();
为防止黄色区域带来的问题:为每一个对象复制一份拷贝:可以这么做:this.say=say;
把say写为一个公用函数。缺点是 破坏了函数的封装性,可能会是函数中充斥大量
全局函数
11.基于原型的创建方式
function Person() {
}
Person.prototype.name="ss";
Person.prototype.age="10";
Person.prototype.say=function(){
alert(this.name+""+this.age);
}
var P=new Person();
P.say();
在对象中删除某个属性 delete p.name ;
判断某个对象中是否有某个属性P.hasOwnPerporty("name");
12.用json的方式重写原型
function Person() {
}
Person.prototype={
constructor:Person,
name:"linmu",
age:10,
say:function(){
alert(this.age+"hahha"+" "+this.name);
}
}
var p=new Person();
p.say();
这时原型的constructor指向并不是Person,可以通过手动的指向
13.基于原型链的方式继承
Person.prototype=new People();
若使用了Person.prototype={ }重写原型,则继承失效;
14.基于伪装的继承方式
function Person() {
this.color=['red','blue'];
}
function Child() {
Person.call(this);
}
var child=new Child();
alert(child.color);
Person.call(this);调用而非直接用parent() 这样this对象指的就是child
15.基于组合的方式实现继承,原型链和伪造的方式:
function Country() {
this.na='else';
this.bbp='olo';
}
function Person(name) {
this.color=['red','blue'];
this.name=name;
}
function Child(name,age) {
Person.call(this,name);
this.age=age;
}
Child.prototype=new Country();
var child=new Child("linmu",12);
alert(child.color);
alert(child.name);
alert(child.bbp)
16.ajax