zoukankan      html  css  js  c++  java
  • javascript应该注意的小case数据类型

    js的数据类型:Number、String、Boolean、Undefined、Null和Object。我们在js里创建的数据一定是以上几种类型的一种。

    1,typeof操作符

    js提供了typeof操作符来检测数据的类型,但是typeof操作的结果只会是:number,string,boolean,undefined,object,function中的一个,这个和提供的数据类型是不一致的。

    2,undefined类型

    如果一个变量声明未赋值之前,它是undefined类型,并且有值是undefined。

    要注意的是:如果我们对从未声明过的变量,它也是undefined类型,但是对它进行取值的操作将会产生一个变量未定义的错误。

    var message;
    alert(typeof message);  //  undefined
    alert(message);		//  undefined
    //var message2;
    alert(typeof message2);	//  undefined
    alert(message2);	//  错误

    3,Null类型

    null值表示一个空对象指针,它也只有一个值null。

    alert(typeof null);  //  object
    alert(null);	    // null

    另外要注意的undefined值是派生自null值的,就有以下的结果:

    alert(undefined == null);   // true

    尽管如此,但他们两个的作用完全是不一样的,因此我们如果确定一个变量要指向对象,还没有真正指向对象之前,应该在声明它暂时赋值为null。

    4,Boolean类型

    只有两个值ture,false,并且是区分大小写的,也就是说var isError = False;将产生错误。

    js提供了一个Boolean(arg)的函数来将其它类型转为Boolean类型,更有意思也值得注意的特性是js会为流程控制语句(如if)自动调用Boolean类型的转换。

    转型的规则如下:

    Boolean的flase,String类型的“”,Number类型的0和NaN,Object类型的null,undefined类型的undefined会被认为是false,其它都是true。

    5,Number类型

    可用来表示分为整数和浮点数,整数又包括八进制(0开头)、十进制(默认)和十六进制(0x开头)。

    其中八进制如果有某位超过了7,前面的0将被忽略,被认为是十进制。如070转为十进制是56,而018会认为是18。

       
    浮点数值保存空间是整数的两倍,js会把如1.0、10.这样的数值用转为整数来保存。
    要注意的是,尽量不要用基于js浮点数值运算:

    alert(0.1 + 0.2);  //  输出是0.30000000000000004
    

    另外有几个特殊的值要注意:

    Number.MAX_VALUE、Number.MIN_VALUE存储的是所能支持的最大、最小的数,如果超过这个范围将会得到正无穷Infinity、负无穷-Infinity。我们可以用isFinite()函数来判断一个数是不是超出了范围。其中我们可以从Number.NEGATIVE_INFINITY、Number.POSITIVE_INFINITY得到正无穷Infinity、负无穷-Infinity。

    另外还有一个要注意的值NaN,任何一个需要返回数值的运算返回的不是数值将返回NaN,它是一个特殊数值,跟任何数值的任何运算都会返回NaN,并且它不与任何值相等包括自己。
    另外有isNaN()函数,来判断传入的任意类型参数是不是NaN。isNaN会对参数进行转化,如果能转化为数值,就返回false.这上转化是对整体的一个转化,还会把true转为1,false转为0.如果参数是对象,它会先调用对象的valueOf(),如果不能转为数值,会再次调用toString()来判断。

    alert(isNaN("1234asdf")); // true
    alert(isNaN(0070));       // false
    alert(isNaN("00070"));    // false
    alert(isNaN(0x70));       // false
    alert(isNaN("0x70"));     // false
    alert(isNaN(false));      // false
    alert(isNaN(""));         // false
    alert(isNaN(NaN));        // true


           
    6,数值转换:Number(),parseInt(),parseFloat()
    Number()可以对任何类型的参数进行转换,转换规则如下:
        Boolean类型true转为1,false转为0;

        Number类型,直接返回;

        undefined返回NaN;

        String类型,空字符串转为0,数值类型的字符串会忽略所有前置的0转为相应的整型或浮点型,因此八进制将会被忽略,如果是ox开头的数字字符串,将按十六进制数处理转为相对应的十进制数,其它转为NaN;

        object类型,null返回0,其它会调用该对象的valueOf()对其返回值操作,如果返回NaN,再调用其toString()方法,测定返回值。

    alert(Number("1234asdf"));  //  NaN
    alert(Number("00070"));     //  70
    alert(Number("false"));     //  0
    alert(Number(""));          //  0

    parseInt()和parseFloat只对字符串参数操作。

    parseInt()的转化规则:

         它会忽略前面所有的空格,从第一个不是空格的字符开始转化,如果这个字符不是数字或者负号,将返回NaN;或者继续转化下一位置,直到下一个不是数字的位置或者结束位置。这样如“1234abcd”将返回1234,“”返回NaN,”12.3“返回12。

    alert(parseInt("1234abcd"));   //   1234
    alert(parseInt("")); 		//  NaN
    alert(parseInt("12.34"));	// 12

    与Number()不同的是,parseInt()能识别出八进制、十六进制的数值进行对应的转化,但是在浏览器的实现上却出现了问题,IE中会把070转为70,而ff,chrome把070转为56。前面多个0时,相当于只有一个0。

    alert(parseInt("070"));  //  ie弹出70,ff,chrome弹出56

    不过幸好javascript提供了另一个参数来决定要何种(2/8/10/16)进制数来处理。

    alert(parseInt("070","8"));  //  都弹出56

       

    parseFloat()与parseInt()类似,也会逐个检查字符,直到不是数值的字符或第二个小数点出现。

    alert(parseFloat("1234abcd")); //  1234
    alert(parseFloat(""));         //  NaN
    alert(parseFloat("12.34"));    //  12
    alert(parseFloat("12.34.22")); //  12.34
    alert(parseFloat("0x23"));     //  0
    alert(parseFloat("0323"));     //  323
    

    6,String类型

    几乎所有的类型(null和undefined除外)都会有一个tostring()的方法,把自身转为字符串类型。

    另外,数值型的toString()还可以接受一个参数(2/8/10/16),来决定按何种进制表示的字符串值。

    对于null和undefined调用toString()将产生错误,如果不确定要转换值是不是null/undefined,可以调用String()来转换,它会把null转为”null“,undefined转化为"undefined",其它与toString()一样。


     

    7,Object类型
    此类型是一组数据和功能的集合,我们可以var o = new Object();或var o = {};来创建对象。
       

    每个object实例都有一些方法/属性:
        constructor属性:用来保存创建当前对象的方法。
        hasOwnProperty(name):可用于检测当前对象的实例是否有某个属性。
        isPrototypeOf(object):用于检测传入的对象是不是另一对象的原型。
        propertyIsEnumerable(name):用于检测对象的这个属性是不是可以用for-in来枚举。
        toString():返回对象的字符串表示。
        valueof():返回对象的字符串、布尔或数值表示。通常与toString()返回值一样。

  • 相关阅读:
    Python 进阶
    Python 基础
    Python 基础
    Python 基础
    php extension memcache and memcached module on centos6
    前端基础-JavaScript的基本概述和语法
    前端基础-CSS如何布局以及文档流
    前端基础-CSS的属性相关设置
    前端基础-CSS的各种选择器的特点以及CSS的三大特性
    前端基础-CSS是什么?
  • 原文地址:https://www.cnblogs.com/forcertain/p/2363463.html
Copyright © 2011-2022 走看看