string,number类型转换的快捷方法


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 的时候(undefined == null为true)。

//这里的判断,将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.判断是否为空对象


function isEmptyObject(){ var name; //遍历不是空对象返回 for (name in obj) { return false;
    } return true;
}

9.检测对象类型

检 测obj对象类型,返回类型,通过Object.prototype.toString()来判断类型,但是ie低版本兼容性有问题,

因此采用 {}.toString来监测,返回为[object Array],[object Object],[object Function]


// 类型判断 function isType(type){ return function(o){
   return Object.prototype.toString.call(o) === '[object ' + type + ']';
    }
} var isString = isType(“String”); var isObject = isType("Object"); var isArray = isType("Array");
 
isString("I'm Barret Lee.");
isArray([1,2,3]);
isObject({});

10.jquery里的去除空格trim妙用



//相当于if (String.prototype.trim && “\uFEFF\xA0″.trim() !== “”)
高级的浏览器已经支持原生的String的trim方法,但是pFan还为了避免它没法解析全角空白,
所以加多了一个判断:”\uFEFF\xA0″.trim() !== “” vart core_version = "1.0",core_trim = core_version.trim;            
function trim(){
    core_trim && !core_trim.call("\uFEFF\xA0") ? function (text) { return text == null ? "" :
              core_trim.call(text);
 //这里按我的理解应该为" ".trim.call(text),有点不明白转换为"1.1.0".trim.call(text)  } : // 高级的浏览器已经支持原生的String的trim方法,如果浏览器不支持则采用  function (text) { var whitespace = "[\\x20\\t\\r\\n\\f]",
             rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g");  return text == null ? "" :
                            (text + "").replace(rtrim, "");
                    }, //nodeName函数是获取dom节点的节点名字或者判断其名字跟传入参数是否匹配   nodeName: function(elem,name){ //IE下,DOM节点的nodeName是大写的,例如DIV  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
                }
}

11.jquery中检测数组或者类数组中是否含存在传入的值


/**
    检查数组中是否存在传入的值,如果存在就返回值所在的位置,如果不存在就返回-1。
    *elem 规定需检索的值。
    *arr 数组
    *i 可选的整数参数。规定在数组中开始检索的位置。它的合法取值是 0 到 arr.length - 1。
    如省略该参数,则将从数组首元素开始检索。 */ function inArray(elem, arr, i){ var len; if (arr) { //如果浏览器支持Array拥有indexOf方法 if ([].indexOf) { return [].indexOf.call(arr, elem, i);
        }
        len = arr.length; //当i为负数的时候,从数组后边len+i的位置开始索引
      //理解这个分成两个部分i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;,i=i为true
        ,执行(i < 0 ? Math.max(0, len + i) : i),反正执行i=0  i = i ? i < 0 ? Math.max(0, len + i) : i : 0; for (; i < len; i++) { //双重检测防止类似这样的数组ar=[];ar[1]=1;ar[0]=undefined;0 in ar =false;a[0]===undefined; // 0 in arr  => arr[0]是否存在  'nme' in arr => arr['nme']是否存在  if (i in arr && arr[i] === elem) { return i;
            }
        }
    } return -1;
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值