javascript学习7-细节总结
学习js,总结了一些需要注意的细节部分,和大家一起分享,共同进步。
一、javascript区分大小写
js数据类型:
1.基本数据类型-数值型,字符串型,布尔型
2.复杂类型:数组,对象
3.特殊类型:null,undefined
二、javascript中函数2种调用方式
1.根据函数名直接调用,如:test(num1,num2);//此处test为自己写的一个函数。
2.将函数名赋值给变量,变量名(实参)方式来调用。如:var myFun=test; myFun(num1,num2);
备注:
alert(test)中此时会打印出整个函数的内容,当赋值函数给变量名时,var myFun=test;alert(myFun)此时也会打印test函数体。
三、函数返回值说明
var myFun=test(num1,num2);此时如果test有返回值,则myFun为返回值,否则为undefined
四、javascript支持可变参数
比如:
function test() { for(var i=0;i<arguments.length;i++) { alert(arguments[i]); } } test(1,2); test(100);
//备注:javascript函数不支持重载。函数名相同参数不同javascript不支持。js只关注函数名
五、javascript一维数组
var a=[1,2,3]; for(var i=0;i<a.length;i++) { alert(a[i]); }
1.数组的引用:数组名[下标]
var a=[23,'hello',4.5];
alert(a[2]);
2.如果下标越界,则输出undefined。
3.js数组可以动态增长。
4.对字符串可以用split分割成字符串数组
5.数组可以存放任意类型数据
6.for in用法(了解)
var arr=['a','b','c','hello']; arr['dd']='gaga'; for(var key in arr) { alert(key+":"+arr[key]); }
六、javascript二维数组
允许每行列数不同。
var arr2=[['a','b','d'],['c','d','e','f']]; for(var i=0;i<arr2.length;i++) { //输出第一行 for(var j=0;j<arr2[i].length;j++) { document.writeln(arr2[i][j]+" "); } document.writeln("<br/>"); }
七、二分查找(见js学习6小练习2)
八、javascript 类与对象
javascript所有东西都是对象,基于对象语言。
javascript中么有类,只有原型对象,但是很多人就将此叫做类。
九、创建对象的方法
a.工厂方法-使用new object俩创建对象并添加相关属性
b.使用构造函数定义类(原型对象)
eg.//此处使用构造函数定义类 function Person(){} var a=new Person(); window.alert(a.constructor); var b="1234"; alert(b.constructor); if( a instanceof Person) { alert("a 是person"); }
eg2://属性名称访问
访问属性方法有两种:
1.普通方式 -对象名.属性名
2.动态访问- 对象名["属性名"]
var abc=89; function Person() { } var p1=new Person(); p1.name="watermelon"; alert(p1.name); var val="na"+"me"; p1["name2"]="嘎嘎嘎"; alert(p1.name2); p1[val]="watermelon222"; alert(p1[val]);
十、js回收机制
js提供一种机制,主动释放对象内存:delete功能说明
function Person(){} var a=new Person(); a.age=50; delete a.age; //delete只能删除对象属性,无法删除一个对象属性 function Person() { var nam="abc";//私有属性,创建类的对象时不能访问 var age=900; }
十一、this定义使用
this不能放在类定义外部使用
十二、prototype使用
function Dog(){ } Dog.prototype.shout=function() { //绑定功能到DOG alert("dog"); } var dog1=new Dog(); var dog2=new Dog(); dog1.shout(); dog2.shout(); //此处dog1和dog2的shout函数是公共的,指的是一个函数。
十三、javascript基于类object
//初步体验object类的用法
var p=new Object(); p.name="dd";
//array数组
//给array添加一个方法为find(val),返回val的位置
var p1=new Array();
Array.prototype.find=function(val){
for(var i=0;i<this.length;i++)
{
if(val==this[i])
{
return i;
}
}
return -1;
}
p1[0]=1;
p1[1]=2;
p1[2]=3;
alert(p1.find(3));
//结果返回2
十四、javascript中prototype设置的函数 不能访问私有属性
十五、javascript的继承关系
1对象冒充-可以实现多重继承
function Stu(name,age)
{
this.name=name;
this.age=age;
this.show=function()
{window.alert("name="+this.name+";age="+this.age);}
}
function MidStu(name,age)
{
this.stu=Stu;
this.stu(name,age);//通过对象冒充的方式来达到继承的效果。备注:如果此句话没有写,就没有实现继承。
}
var midStu1=new MidStu("赵玉婷",20);
midStu1.show();
2、js中重载和重写
2.1、js不支持重载,即不可以通过参数的个数来决定调用哪一个函数,但是js本身支持可变参数,所以可以看成js支持重载。
例如 function abc(){ if(arguments.length==1)...}
2.2、重写:js子类可以重新编写父类的某个方法来实现对其覆盖。
十六、javascript 多态
1、有食物(),人,动物三个类
//主人喂食物给动物 function Master() { this.feed=function(animal,food){ document.write("主人给"+animal.name+food.name); } } function Food(name) { this.name=name; } function Fish(name) { this.food=Food; this.food(name); } function Bone(name) { this.food=Food; this.food(name); } //动物 function Animal(name) { this.name=name } function Cat(name) { this.animal=Animal; this.animal(name); } function Dog(name) { this.animal=Animal; this.animal(name); } var cat=new Cat("小猫咪"); var dog=new Dog("小狗狗"); var fish=new Fish("小鱼"); var bone=new Bone("小骨头"); var master=new Master("西瓜"); master.feed(cat,fish);
十七、闭包
function A() { var i=0; function b() { alert(i); } return b; } var c=A(); c();//此种方法下,由于b中有对临时变量i的操作,故i不能被回收。c()相当于b() A();//此种方法下,gc垃圾回收机制会直接对垃圾进行回收。