zoukankan      html  css  js  c++  java
  • javascript学习笔记2-typeof、Number类型、Boolean()

    1.typeof操作符

    对一个值使用typeof操作符可能返回下列某个字符串

    • "undefined"——这个值未定义
    • "boolean"——这个值是布尔值
    • "string"——这个值是字符串
    • "number"——这个值是数值
    • "object"——这个值是对象或null
    • "function"——这个值是函数
    var message="some string";
    alert(typeof message);  //"string"
    alert(typeof(message)); //"string"
    alert(typeof 95);    //"number"
    

    2.Number类型

    浮点数值的最高精度是17位小数,进行算术计算时其精确度远远不如整数。例如0.1+0.2结果不是0.3,而是0.3000000000000004.

    ECMAScript能够表示的最小值保存在Number.MIN_VALUE中,最大值保存在Number.MAX_VALUE中。

    如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个值就会被自动转换为特殊的Infinity值。

    具体来说,如果这个值是负数,则会被转换为负无穷(-Infinity),如果这个值为正数,则会被转换为Infinity(正无穷) 判断一个数是不是有穷的(位于最小值和最大值之间),使用isFinite()函数。

    例如:

      var result = Number.MAX_VALUE + Number.MIN_VALUE;
      alert(isFinite(result));//false
    
     //NaN,非数值(Not a Number)
      alert(NaN == NaN);//false
      isNaN();//接收一个参数,参数可以是任何类型.
    

      isNaN在接收到一个值之后,会尝试将这个值转换为数值.某些不是数值的值会直接转换为数值,例如字符串"10"或Boolean值.

      而任何不能被转换为数值的值都会导致函数返回true

      例如:

      alert(isNaN(NaN));//true
      alert(isNaN(10));//false
      alert(isNaN("10"));//false(可以被转换为数值10)
      alert(isNaN("blue"));//true
      alert(isNaN(true));//false(可以被转换为数值1)
    

    数值转换

    Number()、parseInt()和parseFloat()都可以把非数值转换为数值

    Number()可以用于任何数据类型,parseInt(),parseFloat()专门用于把字符串转换为数值.

    Number()的转换规则如下:

    • 如果是Boolean值,true和false分别被转换为1和0
    • 如果是数字值,简单的传入和返回
    • 如果是null值,返回0
    • 如果是undefined,返回NaN
    • 如果是字符串,遵循下列规则:
    •   如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成1,"123"会变成123,而"011"会变成11(前导的零被忽略了);
    •   如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样会忽略前导零)
    •   如果字符串包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值
    •   如果字符串是空的(不包含任何字符),则将其转换为0
    •   如果字符串中包含除上述字符格式之外的字符,则将其转换为NaN
    • 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值.如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串

    例:

    var num1 = Number("Hello world!");//NaN
    var num2 = Number("");//0
    var num3 = Number("000011");//11
    var num4 = Number(true);//1

    在处理整数的时候果然那个常用的是parseInt()函数.parseInt()转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符.

    如果第一个字符不是数字字符或者负号,parseInt()会返回NaN;用parseInt()转换空字符串会返回NaN(Number()对空字符返回0).

    如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符.

    例如,"1234blue"会被转换为1234,因为"blue"会被完全忽略.类似的,"22.5"会被转换为22,因为小数点并不是有效的数字字符.

      如果字符串中的第一个字符是数字字符,parseInt()也能识别出各种整数格式(即前面讨论的十进制、八进制、十六进制数).也就是说,如果字符串以"0x"开头且后跟数字字符,就会将其当做一个十六进制整数;如果字符串以"0"开头且后跟数字字符,则会将其当做一个八进制数来解析.

    例如:

    var num1 = parseInt("1234blue");    //1234
    var num2 = parseInt("");                   //NaN
    var num3 = parseInt("0xA");             //10(十六进制数)
    var num4 = parseInt(22.5);               //22
    var num5 = parseInt("070");             //56(八进制数)
    var num6 = parseInt("70");               //70(十进制数)
    var num7 = parseInt("0xf");              //15(十六进制数)

    注意:在使用parseInt()解析像八进制字面量的字符串时,ECMAScript 3和5存在分歧.

    例如

    //ECMAScript 3认为是56(八进制),ECMAScript 5被认为是0(十进制)
    var num = parseInt("070");
    

          在ECMAScript 3 JavaScript引擎中,"070"被当成八进制字面量,因此转换后的值是十进制的56.而在ECMAScript 5 JavaScript引擎中,parseInt()已经不具有解析八进制值的能力,因此前导的零会被认为无效,从而将这个值当成"0",结果就得到十进制的0.在ECMAScript 5中,即使是在严格模式下也会如此.

          为了消除在使用parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(即多少进制).如果知道要解析的值是十六进制格式的字符串,那么指定基数16作为第二个参数,可以保证得到正确的结果,例如:

    var num = parseInt("0xAF", 16);//175
    

      实际上,如果指定了16作为第二个参数,字符串可以不带前面的"0x",如下所示:

    var num1 = parseInt("AF", 16);//175
    var num2 = parseInt("AF");//NaN
    

       这个例子中的第一个转换成功了,第二个失败了.差别在于第一个转换传入了基数,明确告诉parseInt()要解析一个十六进制格式的字符串;而第二个转换发现第一个字符不是数字字符,因此就自动终止了.

    指定基数会影响转换的输出结果.例如:

    var num1 = parseInt("10", 2);//2(按二进制解析)
    var num2 = parseInt("10", 8);//8(按八进制解析)
    var num2 = parseInt("10", 10);//10(按十进制解析)
    var num2 = parseInt("10", 16);//16(按十六进制解析)
    

      不指定基数意味着让parseInt()决定如何解析输入的字符串,因此为了避免错误的解析,应当指定基数

      与parseInt()类似,parseFloat()也是从第一个字符(位置0)开始解析每个字符.而且也是一直解析到字符串的末尾,或者解析到遇见一个无效的浮点数字字符为止.也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此他后面的字符串将被忽略.举例来说,"22.34.5"将会被解析为22.34.

      除第一个小数点有效之外,parseFloat()和parseInt()第二个区别在于他始终都会忽略前导的零.parseFloat()可以识别前面讨论的所有浮点数值格式,也包括十进制整数格式.但十六进制格式的字符串始终会被转换为0.由于parseFloat()只解析十进制值,因此他没有用第二个基数指定基数的用法.最后还要注意一点:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后面都是零),parseFloat()会返回整数.

    例如:

    var num1 = parseFloat("1234blue");    //1234(整数)
    var num2 = parseFloat("0xA");    //0
    var num2 = parseFloat("22.5");    //22.5
    var num2 = parseFloat("22.34.5");    //22.34
    var num2 = parseFloat("0908.5");    //908.5
    var num2 = parseFloat("3.125e7");    //31250000

      String类型

      在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串.String()函数遵循下列转换规则:

    • 如果值有toString()方法,则调用该方法(没有参数)并返回相应结果;
    • 如果值是null,则返回"null";
    • 如果值是undefined,则返回"undefined"
    var value1 = 10;
    var value2 = true;
    var value3 = null;
    var value4;
    
    alert(String(value1));    //"10"
    alert(String(value2));    //"true"
    alert(String(value3));    //"null"
    alert(String(value4));    //"undefined"
    

      这里先后转换了4个值:数值、布尔值、null和undefined.数值和布尔值的转换结果与调用toString()方法得到的结果相同.因为null和undefined没有toString()方法,所以String()函数就返回了这两个值的字面量.

    3.Boolean()函数

    /*可以对任何数据类型的值调用Boolean()函数,并且总会返回一个Boolean值。
    返回的值是true还是false,取决于要转换值的数据类型及其实际值。下表给出了各种数据类型及其对应转换规则*/
    数据类型 转换为true的值 转换为false的值
     Boolean true   false
    String   任何非空字符串 空字符串 
    Number 

    任何非零数字值

    (包括无穷大) 

    0和NaN 
    Object   任何对象 null 
     Undefined

     n/a(not applicable)

    不适用

    undefined 

      

  • 相关阅读:
    Asp.NET 4.0 ajax实例DataView 模板编程1
    ASP.NET 4.0 Ajax 实例DataView模板编程 DEMO 下载
    部分东北话、北京话
    .NET 培训课程解析(一)
    ASP.NET 4.0 Ajax 实例DataView模板编程2
    ASP.NET Web Game 架构设计1服务器基本结构
    ASP.NET Web Game 构架设计2数据库设计
    TFS2008 基本安装
    Linux上Oracle 11g安装步骤图解
    plsql developer远程连接oracle数据库
  • 原文地址:https://www.cnblogs.com/zhyue93/p/javascript2.html
Copyright © 2011-2022 走看看