• Web | JavaScript的引用数据类型强制转换类型


    我在这里主要的想提下的是JavaScript中的引用类型进行强制转换类型.因为对于基本数据类型的变换大多都是雷同的,很容易熟知,但是引用数据类型有一点小插曲.

    JavaScript的引用类型主要为对象,数组和函数.主要针对的是对对象和数组进行转换.而转换又包括两种方式,即显式和隐式转换.

    显式强制类型转换

    首先我们需要一些基本的规则.

    基本类型的字符串化规则:

    • null ==> 'null'
    • true ==>'true' ,false ==> 'false'
    • undefined ==> 'undefined'
    • 数字也是自身字符串化,1 ==> '1'

    基本类型的数字化规则:

    • null ==> 0
    • undefined ==> NaN
    • true ==> 1, false ==> 0
    • 字符串会拆开引号,看它是否是数字,是则输出数字,否则输出NaN.如果是空字符串,则会转成0.

    不同类型对象的valueof规则:

    对象 ==>对象本身

    Boolean ==> 布尔值

    Number ==> 数字值

    String ==> 字符串值

    Array ==> 返回数组对象本身

    Date ==> 距离1970的毫秒数

    Function ==> 函数本身

    Math和Error没有valueof方法

    通过构造String()化

    首先,会调用引用数据类型的tostring()方法,会看该方法是否会返回基本数据类型,如果是就使用.如果不是就会调用valueof方法,返回基本数据类型就使用,如果不是则会报错.

    		//通过复写其系统方法来观察
    		// obj,对象
    		Object.prototype.toString=function () {
                return  [];
            }
            Object.prototype.valueOf=function () {
                return  456;
            }
           var obj = {
               name:"Jan",
               age:18
           }
            // obj.toString()  ---> obj.valueOf()
           var res = String(obj);
           console.log(typeof res,res);//string '456'
    
    		// 数组
    		 Array.prototype.toString=function () {
    
            }
            Array.prototype.valueOf=function () {
                return  123;
            }
           var arr =[1,2,3,4];
           var res = String(arr);
           console.log(typeof res,res);//string undefined
    

    通过构造Number()化

    首先,会调用引用数据类型的valueof()方法,会看该方法是否会返回基本数据类型,如果是就使用.如果不是就会调用tostring()方法,返回基本数据类型就使用,如果不是则会报错.

    	//对数组和对象进行number化
    	var arr = [1,2,3];
        var res = Number(arr); //tostring==>1,2,3
        console.log(typeof res,res);//number NaN
    
        Object.prototype.valueOf=function(){
            return "    12345     ";
        }
        var obj ={};
        var res = Number(obj);
        console.log(typeof res,res);//number 12345
    
        var res = +obj;
        console.log(typeof res,res);//number 12345
    

    只有Number()和'+'正号才能激发显式number化.

    另外提下toPrimitive,它是引用数据类型转基本数据类型.都是先回调用valueof方法,然后才调用tostring方法.

    隐式强制类型转换

    隐式转换一般是'+'符号触发,还有逻辑判断触发

        //如果某个操作数是字符串  + 将进行拼接操作
        //遇到对象 则ToPrimitive()
    
        Array.prototype.valueOf=function(){
            return "1";
        }
        Array.prototype.toString=function(){
            return false;
        }
        console.log([] + 1); //'11'
    
    (1)  if (..) 语句中的条件判断表达式。
    (2)  for ( .. ; .. ; .. ) 语句中的条件判断表达式(第二个)。
    (3)  while (..) 和 do..while(..) 循环中的条件判断表达式。
    (4)  ? : 中的条件判断表达式。
    (5)  逻辑运算符 || (逻辑或)和 && (逻辑与)左边的操作数(作为条件判断表达式)
    
  • 相关阅读:
    什么是高可用性(High Availability)?
    Programer's Tools
    dotnetcore 站点搭建实践
    Nginx使用总结
    小程序开发工具一直登陆不上,提示网络失败
    前端页面JS和CSS以及图片加载nginx报错:net::ERR_CONTENT_LENGTH_MISMATCH的解决与检查
    angualrjs添加ngTouch
    H5自定义金额键盘,改良后ios体验效果流畅
    js生成带有logo的二维码并保存成图片下载
    模仿input闪烁光标
  • 原文地址:https://www.cnblogs.com/JanChuJun/p/10140933.html
Copyright © 2020-2023  润新知