JS的一些学习笔记
一、ECMAScript 类型:
- 原始类型:Undefined,Null,Bollean,Number,String
- 引用类型:Object
二、函数:
1 | function a(){} //定义,不自动执行 |
1 | var a = function(){} //定义,不自动执行 |
1 | var a = function(){}(); //立即执行 |
1 | (function a(){})(); //立即执行 |
1 | (function(){})(); //同上一样,立即执行 |
1 | (function(){}()); //上边的”美观“写法,立即执行 |
1 | !function(){}(); //立即执行,装B写法 |
1 | +function(){}(); //立即执行,装B写法 |
1 | true && function(){}(); //立即执行,装B写法 |
三、函数闭包:
1 | var Circle = function(r){ |
1 | var Circle = function(){ |
1 | var Circle = new Object(); |
1 | var Circle={ |
1 | var Circle = new Function("this.PI=3.1415926;this.area=function(r){return r * r * this.PI}"); |
四、函数的prototype和直接赋值的方法的区别:
1 | var ff = function(){ |
解释:
1、不使用prototype属性定义的对象方法,是静态方法,只能直接用类名进行调用!另外,此静态方法中无法使用this变量来调用对象其他的属性!
2、使用prototype属性定义的对象方法,是非静态方法,只有在实例化后才能使用!其方法内部可以this来引用对象自身中的其他属性!
五、直接用in判断对象是否有该属性
1 | var dd = {"aa":"1","bb":"2"} |
六、js方法里面,带空格的处理
动态拼接html的时候,如以下方法会报错
1 | <a id="test" onclick=fun(" 你好 有空格","en这个没空格")></a> |
- escape 函数 和unescape函数
- 不把参数拼接在html中的函数中,拼为该元素的属性,如:
1 | <a id="test" data-name=" 你好 有空格" onclick="fun(this)"></a> |
七、for in方法既能循环数组也能循环对象,同 jQuery 的 $.each
1 | var a = {"a":"a","b":"b","c":"c"},b = ["a","b","c"]; |
备注:但是直接用下标取值的时候对象不行;能 b[0],不能 a[0]
** 拓展:**
1.原生JS循环数组还能用 forEach (注意:输出参数和$.each的参数输出相反)
1 | a = ["a","b","c"], |
2.$.each后面还能加参数,如果加入参数,则输出的是 自定义的参数,用this输出当前循环的对象
1 | $.each(b,function(k,v){console.log(k+","+v);}) //输出 0,a , 1,b ,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