javascript小技巧
1、如何识别一个数据类型是否是对象(someData):
(1)someData typeof 'object' console.log({} typeof 'object') // true console.log([] typeof 'object') // true console.log(null typeof 'object') // true 通过typeof无法识别一个数据是否是对象
(2)Object.prototype.toString.call(someData) === “[object Object]” console.log(Object.prototype.toString.call(obj)); //[object Object] console.log(Object.prototype.toString.call(arr)); //[object Array] console.log(Object.prototype.toString.call(null)); //[object Null]
2、一个简单的全局变量‘坑’
(function (){var a = b =3})() console.log(a)// undefined console.log(b)//3 上述解析中b是全局变量,a是局部变量
3、将 JavaScript 代码包含在一个函数块中有神马意思呢?为什么要这么做?
换句话说,为什么要用立即执行函数表达式(Immediately-Invoked Function Expression)。
IIFE 有两个比较经典的使用场景,一是类似于在循环中定时输出数据项,二是类似于 JQuery/Node 的插件和模块开发。
for(var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); } 上面的输出并不是你以为的0,1,2,3,4,而输出的全部是5,
这时 IIFE 就能有用了: for(var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i); }, 1000); })(i) }
而在 JQuery/Node 的插件和模块开发中,为避免变量污染,也是一个大大的 IIFE: (function($) { //代码 } )(jQuery);
全局变量的生存周期是永久的,除非我们手动删除它