JavaScript学习笔记
2016-03-09 16:15
525 查看
一、ECMAScript 类型:
原始类型:Undefined,Null,Bollean,Number,String
引用类型:Object
二、函数:
function a(){}//定义,不自动执行
var a = function(){}//定义,不自动执行
var a = function(){}();//立即执行注意:function a(){}();//错误的
(function a(){})();//立即执行
(function(){})();//同上一样,立即执行
(function(){}());//上边的”美观“写法,立即执行
!function(){}();//立即执行,装B写法
+function(){}();//立即执行,装B写法
true && function(){}();//立即执行,装B写法
三、函数闭包:
1.var Circle = function(r){this.r = r;}
Circle.PI = 3.1415926;
Circle.prototype.area = funtion(){return this.PI * this.r * this.r;}
调用:var c = new Circle(1.0); alert(c.area());//或者 (new Circle()).area(1.0);
2.var Circle = function(){ var obj = {};obj.PI=3.1415926;obj.area=function(r){return this.PI * r * r;}return obj;}
或者:var Circle = function(){ return{ PI:3.1415926,area:function(r){return this.PI * r * r;}}}
调用:var c = new Circle(1.0); alert(c.area());//或者 (new Circle()).area(1.0);
改进版:var Circle = (function(){ var obj = {};obj.PI=3.1415926;obj.area=function(r){return this.PI * r * r;}return obj;}());
调用: Circle.area(1);
3.var Circle = new Object(); Circle.PI = 3.14159; Circle.Area = function( r ) { return this.PI * r * r; }
调用:alert( Circle.Area( 1.0 ) );
4.var Circle={"PI":3.1415926,"area":function(r){return this.PI * r * r}}
调用:alert( Circle.Area( 1.0 ) );
5.var Circle = new Function("this.PI=3.1415926;this.area=function(r){return r * r * this.PI}");
调用:alert((new Circle()).area(1.0));
四、函数的prototype和直接赋值的方法的区别:
var ff = function(){ this.PI = 3.1415926; }
ff.showD = function(){ alert(this.PI); }
ff.prototype.showE = function (){ alert(this.PI); }
调用:ff.showD();//undefined
(new ff()).showE();//3.1415926
错误 :ff.showE(); (new ff()).showD();//报错
解释:1、不使用prototype属性定义的对象方法,是静态方法,只能直接用类名进行调用!另外,此静态方法中无法使用this变量来调用对象其他的属性!
2、使用prototype属性定义的对象方法,是非静态方法,只有在实例化后才能使用!其方法内部可以this来引用对象自身中的其他属性!
五、直接用in判断对象是否有该属性:
var dd = {"aa":"1","bb":"2"}
"aa" in dd //true;
"cc" in dd //false;
六、js方法里面,带空格的处理(动态拼接html的时候,如 <a id="test" onclick=fun(" 你好 有空格","en这个没空格")></a>)
1.escape 函数 和unescape函数
2.不把参数拼接在html中的函数中,拼为该元素的属性,如:<a id="test" data-name=" 你好 有空格" onclick="fun(this)"></a>
七、js用for in方法 既能循环数组也能循环对象,同 jQuery 的 $.each
var a = {"a":"a","b":"b","c":"c"},b = ["a","b","c"];
for(var t in a){console.log(t);}//输出 0,1,2
for(var t in b){console.log(t);}//输出 a,b,c
for(var t in a){console.log(a[t]);}//输出 a,b,c
for(var t in b){console.log(a[t]);}//输出 a,b,c
$.each(a,function(k,v){console.log(k+","+v);})//输出 a,a , b,b ,c,c
$.each(b,function(k,v){console.log(k+","+v);})//输出 0,a , 1,b ,2,c
备注:但是直接用下标取值的时候对象不行;能 b[0],不能 a[0]
拓展:1.原生JS循环数组还能用 forEach (注意:输出参数和$.each的参数输出相反)
a = ["a","b","c"]
,b = ["a", "b", "c"];a.forEach(function(k,v){console.log(k+","+v)})
//输出 a,0 , b,1 ,c,2
2.$.each后面还能加参数,如果加入参数,则输出的是 自定义的参数,用this输出当前循环的对象
$.each(b,function(k,v){console.log(k+","+v);})//输出 0,a , 1,b ,2,c
$.each(b,function(k,v){console.log(k+","+v);},["1","2"])//输出 1,2 ,1,2 ,1,2
$.each(b,function(k,v){console.log(this +","+ k+","+v);})//输出 a,0,a , b,1,b ,c,2,c
具体参考:http://www.cnblogs.com/mabelstyle/archive/2013/02/19/2917260.html
八、js四种取整方法的比较 Math.floor vs Math.round vs parseInt vs |0 vs >>0 vs ~~ vs >>>0
parseInt最慢,其他差不多(Math.round 是四舍五入,其他方法都是直接取整)
详情参照:http://jsperf.com/math-floor-vs-math-round-vs-parseint/42
原始类型:Undefined,Null,Bollean,Number,String
引用类型:Object
二、函数:
function a(){}//定义,不自动执行
var a = function(){}//定义,不自动执行
var a = function(){}();//立即执行注意:function a(){}();//错误的
(function a(){})();//立即执行
(function(){})();//同上一样,立即执行
(function(){}());//上边的”美观“写法,立即执行
!function(){}();//立即执行,装B写法
+function(){}();//立即执行,装B写法
true && function(){}();//立即执行,装B写法
三、函数闭包:
1.var Circle = function(r){this.r = r;}
Circle.PI = 3.1415926;
Circle.prototype.area = funtion(){return this.PI * this.r * this.r;}
调用:var c = new Circle(1.0); alert(c.area());//或者 (new Circle()).area(1.0);
2.var Circle = function(){ var obj = {};obj.PI=3.1415926;obj.area=function(r){return this.PI * r * r;}return obj;}
或者:var Circle = function(){ return{ PI:3.1415926,area:function(r){return this.PI * r * r;}}}
调用:var c = new Circle(1.0); alert(c.area());//或者 (new Circle()).area(1.0);
改进版:var Circle = (function(){ var obj = {};obj.PI=3.1415926;obj.area=function(r){return this.PI * r * r;}return obj;}());
调用: Circle.area(1);
3.var Circle = new Object(); Circle.PI = 3.14159; Circle.Area = function( r ) { return this.PI * r * r; }
调用:alert( Circle.Area( 1.0 ) );
4.var Circle={"PI":3.1415926,"area":function(r){return this.PI * r * r}}
调用:alert( Circle.Area( 1.0 ) );
5.var Circle = new Function("this.PI=3.1415926;this.area=function(r){return r * r * this.PI}");
调用:alert((new Circle()).area(1.0));
四、函数的prototype和直接赋值的方法的区别:
var ff = function(){ this.PI = 3.1415926; }
ff.showD = function(){ alert(this.PI); }
ff.prototype.showE = function (){ alert(this.PI); }
调用:ff.showD();//undefined
(new ff()).showE();//3.1415926
错误 :ff.showE(); (new ff()).showD();//报错
解释:1、不使用prototype属性定义的对象方法,是静态方法,只能直接用类名进行调用!另外,此静态方法中无法使用this变量来调用对象其他的属性!
2、使用prototype属性定义的对象方法,是非静态方法,只有在实例化后才能使用!其方法内部可以this来引用对象自身中的其他属性!
五、直接用in判断对象是否有该属性:
var dd = {"aa":"1","bb":"2"}
"aa" in dd //true;
"cc" in dd //false;
六、js方法里面,带空格的处理(动态拼接html的时候,如 <a id="test" onclick=fun(" 你好 有空格","en这个没空格")></a>)
1.escape 函数 和unescape函数
2.不把参数拼接在html中的函数中,拼为该元素的属性,如:<a id="test" data-name=" 你好 有空格" onclick="fun(this)"></a>
七、js用for in方法 既能循环数组也能循环对象,同 jQuery 的 $.each
var a = {"a":"a","b":"b","c":"c"},b = ["a","b","c"];
for(var t in a){console.log(t);}//输出 0,1,2
for(var t in b){console.log(t);}//输出 a,b,c
for(var t in a){console.log(a[t]);}//输出 a,b,c
for(var t in b){console.log(a[t]);}//输出 a,b,c
$.each(a,function(k,v){console.log(k+","+v);})//输出 a,a , b,b ,c,c
$.each(b,function(k,v){console.log(k+","+v);})//输出 0,a , 1,b ,2,c
备注:但是直接用下标取值的时候对象不行;能 b[0],不能 a[0]
拓展:1.原生JS循环数组还能用 forEach (注意:输出参数和$.each的参数输出相反)
a = ["a","b","c"]
,b = ["a", "b", "c"];a.forEach(function(k,v){console.log(k+","+v)})
//输出 a,0 , b,1 ,c,2
2.$.each后面还能加参数,如果加入参数,则输出的是 自定义的参数,用this输出当前循环的对象
$.each(b,function(k,v){console.log(k+","+v);})//输出 0,a , 1,b ,2,c
$.each(b,function(k,v){console.log(k+","+v);},["1","2"])//输出 1,2 ,1,2 ,1,2
$.each(b,function(k,v){console.log(this +","+ k+","+v);})//输出 a,0,a , b,1,b ,c,2,c
具体参考:http://www.cnblogs.com/mabelstyle/archive/2013/02/19/2917260.html
八、js四种取整方法的比较 Math.floor vs Math.round vs parseInt vs |0 vs >>0 vs ~~ vs >>>0
parseInt最慢,其他差不多(Math.round 是四舍五入,其他方法都是直接取整)
详情参照:http://jsperf.com/math-floor-vs-math-round-vs-parseint/42
相关文章推荐
- Python动态类型的学习---引用的理解
- 学习 Linux 是我们的爱情语言
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- 5个常见可用性错误和解决方案
- 基础命令学习总结
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 主页木马的制作方法
- 土人系列AS入门教程 -- 对象篇
- 文件遍历排序函数
- 解密网页加密的两个方法
- Prototype 学习 工具函数学习($方法)
- 定义标题的最好方法
- js可突破windows弹退效果代码
- Ruby简明教程之方法(Method)介绍
- Ruby基础知识之方法、代码段
- C#托管堆对象实例包含内容分析
- C#获取文件夹及文件的大小与占用空间的方法
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页