看了javascript 杂谈之哪种写法你更喜欢?后很是有收获,所以总结一下:
1.js支持“逻辑短路”,所谓逻辑短路是指:
- 在”||” 运算中,第一个条件符合就结束判断。
- 在”&&”运算中,第一个条件不符合就结束判断。
2.匿名函数
(function() { })();这种写法作用是声明并执行一个方法,等同于:
functionTest() { } Test();
3.连续赋值
var a = {n:1};
var b = a;
a.x = a = {n:2}; //相当于a.x=(a={n:2})
console.log("a.x: " + a.x); //返回值:a.x: undefined
console.log("a.n: " + a.n); //返回值:a.n: 2
console.log("b.x: " + b.x); //返回值:b.x: [object Object]
console.log("b.n: " + b.n); //返回值:b.n: 1
说明:由于js中的连续赋值是按引用传递的,所以在a.x=a={n:2}后,两个a已经不是一个对象了,所以现在的a中并没x这个属性
4.下边这段代码类似与jquery中的写法
(function (windows) { var yQuery = function () { //获取对象本身 return yQuery.fn.init(); }; yQuery.fn = yQuery.prototype = { //初始化 inti: function () { return this; } }; //这里定义扩展方法 yQuery.extend = yQuery.fn.extend = function () { var options, src, copy, target = arguments[0] || {}, i = 1, length = arguments.length; if (length === i) { //this=yQuery=$ target = this; --i; } for (; i < length; i++) { if ((options = arguments[i]) != null) { for (var name in options) { src = target[name]; copy = options[name]; //判断this中是否存在,存在则跳过,执行下一次循环 if (src === copy) { continue; } //判断是不是对象,如果是对象则递归 if (typeof copy === "object") { yQuery.extend(name, copy); } if (copy !== undefined) { //这里的target=yQuery=$ target[name] = copy; } } } } return target; }; //向window中添加yQuery和$属性 windows.yQuery = windows.$ = yQuery; })(window);
使用:
方法一:
$.extend({Name:””,getName:function(){alert($.Name)}});
方法二:
$.ui=$.ui || {}; //如果$.ui存在则把自己赋值给自己,反之添加ui并赋值为空对象{}
$.extend($.ui,{Name:””,getName:function(){alert($.Name)}});