一、jquery源码中常见的知识点
1.string,number类型转换的快捷方法
复制代码 代码如下:
// @param s为字符串,n为数字
function fn(obj){
//转换为String类型
var s = obj +"";
//转换为number类型
var n = +obj;
}
分享一个面试例子:
//加会将其后面自动转换成字符串
"64"+4="644"
//减会将其自动转换成数字
"64"-4=60
2.bool类型转换
!!obj,将其强制转换为bool类型
复制代码 代码如下:
alert(!!0) //结果为false
alert(!!"33dd") //结果为true
!obj,取相反的bool类型
复制代码 代码如下:
alert(!0) //结果为true
alert(!"222333") //结果为false
3.=== 与 ==区别
=== 是严格相等,不会进行类型转换,而 == 是不严格相等,会进行类型转换。有些js的书中,建议开发人员永远不要用 == 或者 != 。
但是jquery源码中,有用到“==”或者“!=”的情况 —— 判断 undefined 和 null 的时候。
复制代码 代码如下:
//这里的判断,将obj是null,obj是undefined都排除在外了
if(obj != null){
}
4.检测obj是否为window对象
复制代码 代码如下:
//null == window.null为true
function isWindow(obj){
return obj != null && obj == window.obj;
}
5.|| 与 && 用法技巧
复制代码 代码如下:
//例 var aa=5; name = aa || {} ; alert(name) 则name为55
this.name = name || {} //如果name值存在,则值为name,反之为{}
//例 var aa=5; name = aa && {} ; alert(name) 则name为{},因为aa为5,不为0则为真
this.name = bool && [] //如果bool为true,则值为[],反之则为bool
经典实例:
复制代码 代码如下:
( window.foo || ( window.foo = "bar" ) );
alert(window.foo); //弹出 bar
// 为什么最后的结果是bar呢,其实可以看成是 undefined || bar 出来的结果肯定是bar
6.setTimeout(fn,0)与setTimeout(fn)区别
setTimeout(fn,0)与setTimeout(fn)都是延迟执行,但是setTimeout(fn)比setTimeout(fn,0)延迟时间还要长,例
复制代码 代码如下:
function fn(){
var data = new Date();
for(var i=0;i<=1000;i++){
if(i==1000){
console.log("fn="+data.getTime());
}
}
}
function fn1(){
var data = new Date();
for(var i=0;i<=1000;i++){
if(i==1000){
console.log("fn1="+data.getTime());
}
}
}
setTimeout(fn,0),
setTimeout(fn1);
结果:
7.判断是否为数值
复制代码 代码如下:
function isNumeric(obj){
return !isNaN(parseFloat(obj)) && isFinite(obj);
}
8.判断是否为空对象
复制代码 代码如下: