zoukankan      html  css  js  c++  java
  • JS里面的装箱和拆箱操作

    平日工作里,我想各位少侠对下面的用法都不陌生吧

    var s1 = "abc";
    var s2 = s1.indexOf("a")

    还有例如什么indexOf()等方法,都可以对字符串进行操作,没瑕疵吧

    但是各位少侠想没想过一个问题啊,string是基本数据类型啊,怎么能调用方法了我日哟。各位别慌,我们继续看

    这就不得不引出一个概念:装箱

    装箱:把基本数据类型转化为对应的引用数据类型的操作

    在《javascript高级程序设计》中有这样一句话:

    每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。

    还是拿最开始的例子

    var s1 = "abc";
    var s2 = s1.indexOf("a")

    变量s1是一个基本类型值,它不是对象,它不应该有方法。但是js内部为我们完成了一系列处理(即装箱),使得它能够调用方法,实现的机制如下:

    (1)创建String类型的一个实例;

    (2)在实例上调用指定的方法;

    (3)销毁这个实例;

    下面来看看代码实现:

    var s1  = new String("some text");
    var s2 = s1.substring(2);
    s1 = null;

    这样就完成装箱,我们也就能在s1上调用方法了

    拆箱:将引用类型对象转换为对应的值类型对象

    它是通过引用类型的valueOf()或者toString()方法来实现的。如果是自定义的对象,你也可以自定义它的valueOf()/tostring()方法,实现对这个对象的拆箱。

     
     var objNum = new Number(123);  
     var objStr =new String("123");   
     console.log( typeof objNum ); //object
     console.log( typeof objStr ); //object 
     console.log( typeof objNum.valueOf() ); //number
     console.log( typeof objStr.valueOf() ); //string

    console.log( typeof objNum.toString() ); // string
     console.log( typeof objStr.toString() ); // string

    又收割一个知识点,啊,舒服

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/suihang/p/10606693.html
Copyright © 2011-2022 走看看