美文网首页
JS转换为基础类型

JS转换为基础类型

作者: 一二三kkxx | 来源:发表于2019-02-11 15:43 被阅读3次
输出对象先toString再valueOf

先调用toString,若返回基础类型,则输出

    var test = {
        toString:function () {
            console.log('toString');
            return 1;
        },
        valueOf:function () {
            console.log('valueOf');
            return 2;
        }
    }
    alert(test);   
    // toString
    // 弹出1

若toString返回的不是基础类型,则继续调用valueOf

    var test = {
        toString:function () {
            console.log('toString');
            return {};
        },
        valueOf:function () {
            console.log('valueOf');
            return 2;
        }
    }
    alert(test);   
    // toString
    // valueOf
    // 弹出2

若两者都返回非基础类型值,则抛出异常

    var test = {
        toString:function () {
            console.log('toString');
            return {};
        },
        valueOf:function () {
            console.log('valueOf');
            return {};
        }
    }
    alert(test);   
    // toString
    // valueOf
    // Uncaught TypeError: Cannot convert object to primitive value
参与运算先valueOf再toString

先调用valueOf,若返回基础类型,则进行运算

    var test = {
        toString:function () {
            console.log('toString');
            return 1;
        },
        valueOf:function () {
            console.log('valueOf');
            return 2;
        }
    }
    alert(test + 1);   
    // valueOf
    // 弹出3

若valueOf返回非基础类型,则继续调用toString

    var test = {
        toString:function () {
            console.log('toString');
            return 1;
        },
        valueOf:function () {
            console.log('valueOf');
            return {};
        }
    }
    alert(test + 1);  
    // valueOf 
    // toString
    // 弹出2

若两者返回均为非基础类型,则抛出异常

    var test = {
        toString:function () {
            console.log('toString');
            return {};
        },
        valueOf:function () {
            console.log('valueOf');
            return {};
        }
    }
    alert(test + 1);   
    // valueOf
    // toString
    // Uncaught TypeError: Cannot convert object to primitive value
应用
  • == 比较
    若对象和字符串或者数值比较,则先要将对象先转换成基础类型再进行比较
        var a = {a:1};
        a.valueOf = a.toString = function () {
            return 1;
        }
        a == '1' // true
    
  • add(2)(3)(4)
        function add(arg){
            var sum = arg,
                result = function (b) {
                    sum += b;
                    return result;
                }
            result.valueOf = result.toString = function(){
                return sum;
            }
            return result;
        }
        add(2)(3)(4)
    

相关文章

  • JS转换为基础类型

    输出对象先toString再valueOf 先调用toString,若返回基础类型,则输出 若toString返回...

  • 大厂面试TS(上)

    一、TS面试基础知识 1、什么是TS? 概念:ts 是 js 的超集,即在原有的js语法基础上,添加强类型并切换为...

  • JS数据类型转换

    JS中的数据类型转换是将其他的类型转换为另一种类型。 其它类型转number类型 方法有很多,主要分为以下5种。(...

  • swift3.0 类型转换

    任意对象 anyObject转换为json对象 任意对象转换为String类型 String类型转Int类型

  • JS 里的数据类型转换

    数据转换 其他类型转换为数值 其他类型转string number、boolean类型可通过toString方法转...

  • 2019-07-27 前端面试题

    1.js的基础类型 js的基础类型包括 Undefined , Null , String ,Number ,...

  • JS坑记录

    js == 与 === 的区别[转] 1、对于string,number等基础类型,==和===是有区别的 1)不...

  • javaScript还可以这样写?

    转Boolean类型 这个较为常用。 通过两个取反,可以强制转换为Boolean类型。 转Number类型 Str...

  • js类型转换与四则运算

    js中类型转换有三种情况: ①转换为布尔值 ②转换为数字 ③转换为字符串 类型转换表格 在条件判断时,除了unde...

  • Js基础知识-手动实现深拷贝

    本文将手动实现引用类型的深拷贝关于值类型与引用类型可阅读下方文章:JS基础类型直通车:Js基础知识-变量类型Js基...

网友评论

      本文标题:JS转换为基础类型

      本文链接:https://www.haomeiwen.com/subject/rxpqeqtx.html