• javascript中的真假值、数据类型判断以及+的特殊用法


    一、javascript中的假值

      jQuery中拥有一组数量奇大的假值,包括

        0,NaN(非数),''(空字符串),false,null,undefined

      这些值在if判断中全部等于假,但这些值彼此是不==的。注意空数组[],空对象{}在if判断中是为真的。

    二、javascript中的数据类型

      javascript中变量是没有类型的,只有值才有,变量可以随时持有任意类型的值。

      1)在javascript中一共有七种内置类型,分别是

      string,number,boolean,null,undefined,object,symbol(ES6中新增)

      其中,string,number,boolean,null,undefined是简单基本类型,其本身并不是对象(从这个角度来说,javascript中万物皆对象的说法不完全正确),有时候null会被当做对象,因为typeof null返回object,实际上null本身是一种基本类型。

      2)javascript typeof的返回值有七种,它返回类型的字符串值,有意思的是,这其中类型和它的字符串值并不一一对应,分别是字符串形式的

      string,number,boolean,object,function,undefined,symbol

      其中,typeof undefined =='undefined',typeof null则返回object,虽然null是一种基本的数据类型。typeof function a(){} 则返回 function,虽然function只是object的一种子类型。

      3)javascript的Object有一些对象子类型,包括:

      String,Number,Boolean,Object,Function,Array,Data,RegExp,Error

      其中,String,Number,Boolean是基本类型string,number,boolean的包装类型,当调用对应的方法时,其拆包和装包是自动发生的。

      4)通过Object.prototype.toString.call()返回的值则有10钟,分别是:

      [object String],[object Number],[object Boolean],[object Object],[object Function],[object Array],[object Date],[object RegExp],[object Null],[object Undefined]

      上述对象大多有有文字字面量和构造函数两种形式,其中null和undefined没有对应的构造形式,只有文字形式;相反Date只有构造,没有文字形式。

    三、javascript中的类型判断

      鉴于对象子类型通过typeof是判断不出来的,例如Array,Date的typeof都为Object,RegExp在有些浏览器下为Object,在有些浏览器下为Function。因此typeof在这种情况下是不能精确判断的。像jQuery这样的类库都是通过Object.toString.call的方法来进行类型判断

      此外,对于数字类型,最好使用isFinite判断,isFinite在判断之前会试图将参数转换为number类型。

       
          class2type={},
         core_toString=class2type.toString,   
         jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(i,name){
            class2type["[object "+name+"]"]=name.toLowerCase();
        });
    type:function(obj){
                if(obj===null){
                    return String(null);
                }
                //Date,Array等类型typeof都会返回object,function、正则(部分浏览器)中 typeof都会返回function
                 
                if(typeof obj==='object'||typeof obj==='function'){                
                    return class2type[core_toString.call(obj)]||'object';
                }
                return typeof obj;
            },
            isNumeric:function(obj){
                return !isNaN(parseFloat(obj))&&isFinite(obj);
            },

    三、javascript中加号的神奇用法

    在javascript中,+通常用户数学上的加法运算,以及字符串的链接运算。实际上,+还有一些特殊用法。

    1.将日期转换为毫秒整数

    //+将日期转换为毫秒计数的整数 
    console.log(+new Date());   //1478656394234
    console.log(+new Date('2016/11/11 0:00'));  //1478793600000

    2.转换为数字

    //将其他类型的数据转换为数字类型(多为字符串转换为数字)
    console.log(+'');   //0
    console.log(+true); //1
    console.log(+false);    //0
    console.log(+undefined);    //NaN
    console.log(+null); //0
    console.log(+NaN);  //NaN
    console.log(+'123');    //123
    console.log(+'012');    //12
    console.log(+'1xy');    //NaN

       

  • 相关阅读:
    <img src="">中src不合法导致Page_Load两次甚至多次
    在浏览器地址栏中查看cookie
    cookie在二级域名下的前后台的不同,后台C#调用前台js方法容易犯的错误
    VS调试快捷键
    href="#"与href="javascript:void(0)"的区别
    window.location.href()与window.open()区别
    兼容IE和Firefox的事件的写法
    sp.net中手写ajax检测用户是否存在?
    Eclipse快捷键大全
    修改navigationItem.backBarButtonItem.title的值无效的解决办法
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/6045031.html
Copyright © 2020-2023  润新知