JavaScript学习--2. 数据类型(2)

本文深入探讨JavaScript中的类型转换原理,包括原始值与对象之间的转换、显式与隐式转换过程,以及对象如何转换为原始值等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 不可变的原始值和可变的对象引用 
    原始值(undefined, null, 布尔值, 数字, 字符串)
    对象(数组, 函数)
    原始值是不可更改的。原始值的比较是值的比较。 只有在它们的值相等时它们才相等。 
    对象是可变的(它们的值是可修改的), 对象的比较: 即使两个对象包含同样的属性及相同的值。 它们也不是相等的。各个索引元素完全相等的两个数组也不相等, 只有两个对象同时引用同一个基对象时,它们才相等。

二、 类型转换
    原始值到对象的转换。 通过调用String(), Number(), Boolean()构造函数。转换为它们各自的包装对象
    
    null 和 undefined 属于例外。 当将它们用在期望是一个对象的地方都会造成一个类型错误(TypeError)异常。而不会执行正常的转换

    下边例子的值,都为true
    null == undefined 
    "0" == 0; //比较前字符串转换成数字
    0 == false //布尔值转换成数字
    "0" == false //字符串和布尔值都转换成数字
    
    显式类型转换
         Number("3");     //=> 3
         String(false);     // "false"  或使用false.toString()
         Boolean([]);          // true
         Object(3);               // new Numbers(3);
    除了null, undefined之外的任何值都具有toString()方法
    "+"  一个操作数为字符串。 它将会把另外一个操作数转换成为字符串。
    一元“+”运算符, 将其操作数转换为数字。
    
    Number类定义了toString()方法可以接收表示转換基数的可选参数。 如果不指定此参数。转换规则将是基于十进制。 同样, 亦可以将数字转换为其他进制数。

    toFixed() 根据小数点后的指定位数将数字转换为字符串, 
    toExponential() 使用指数记数法将数字转换为指数形式的字符串, 其中小数点前只有一位, 小数点后面的位数则由参数指定(也就是说有效期
    toPrecision() 根据指定的有效数字位置将数字转换成字符串

    Number()转换一个字符串成数字。 这个方法只能基于十进制进行转变换。 并且不能出现非法的尾随字符。
    parseInt(), parseFloa和()函数更加灵活, parseInt()只解析整数。 parseFloat()可以解析整数和浮点数。

三、 对象转换为原始值
    对象-> 布尔值: 所有对象都转换为true
    对象->字符串&数字:  调用转换对象的一个方法完成
         所有的对象继承了两个转换方法。
     第一个是toString().  作用是返回一个反映这个对象的字符串。
         [1,2,3].toString();           //=> "1,2,3"
         (function(x){f(x);}).toString(); //=> "function(x){\n f(x);\n}"
         /\d+/g.toString();                    // "/\\d+/g"
         new Date(2010,0,1).toString();     //=> "Fri Jan 01 2010 00:00:00 GMT-0800(PST)"
          
     第二个是valueOf().  如果存在任意原始值, 它就默认将对象转换为表示它的原始值。 对象是复合值, 而且大多数对象无法真正表示为一个原始值。 因此默认的valueOf()方法简单地返回对象本身, 而不是返回一个原始值。 
      var d = new Date(2010,0,1); //2010年1月1日
     d.valueOf();          //=> 12623...   时间戳
    
    对象到字符串的转换经过了如下步骤:
    1 如果对象具有toString()方法 则调用这个方法。 如果它返回一个原始值。 JavaScript将这个值转换为字符串(如果本身不是字符串的话), 并返回这个字符串结果。
    2 如果对象没有toString()方法 或者这个方法并不返回一个原始值 那么JavaScript会调用valueOf()方法,。  如果存在这个方法, 则JavaScript调用它 如果返回值是原始值。JavaScript将这个值转换为字符串(如果本身不是字符串的话),并返回这个字符串结果
    
    
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值