资讯专栏INFORMATION COLUMN

String Primitive和String Object

darcrand / 546人阅读

摘要:因此当执行时,会自动将基本类型包装成对应的对象,调用对象上的方法,完成之后自动将对象销毁。所以,这个函数正确写法应该用转换函数将转为。

网上看到下面这段代码,很有意思。

String.prototype.cut = function (len) {
  return this.length > len ? this.substring(0, len) + "..." : this;
};

var obj = ["Superman", "Batman", "Iron Man"];
console.log(typeof obj[1].cut(6));
console.log(obj[1].cut(6));

这段代码很简单,判断字符串的长度,如果大于给定长度(L)输出,输出字符串前L位加上“…”,否则输出字符串本身。

那么,上面的代码是不是和我们期待的一样输出下面的内容呢?

"String"
"Batman"

答案是否定的,实际的输出其实是:

"object"

这其实是因为String对象(String Object)和String基本类型(String Primitive)的不同导致的。字符串在JavaScript中有两种存在形式:

new String("object");// String Object
"primitive";// String Primitive

String的所有实用方法其实都是在String对象的prototype上,String基本类型是没有这些方法的。

因此当执行"primitive".slice(0)时,JavaScript会自动将基本类型包装成对应的对象,调用对象上的方法,完成之后自动将对象销毁。因此,最上面的cut函数中this其实已经不是String Primitive而是String Object,当我们直接返回this时,返回值其实是”Batman”的String Object,所以typeof返回object

所以,这个cut函数正确写法应该用String转换函数将Object转为Primitive。

String.prototype.cut = function (len) {
  return this.length > len ? this.substring(0, len) + "..." : String(this);
};

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78562.html

相关文章

  • JS中将变量转为字符串

    摘要:将与空字符串相加,即可将其转换为字符串。这两者是非常不同的事实上,将作为构造函数使用并不常见,因此仅使用它来转换字符串就好了。这就意味着两者的计算过程是这样的返回值,然后使用转换为字符串。 译者按: 语言的细枝末节了解一下就可以了,不需要太较真,不过如果一点也不知道的话,那就不太妙了。 原文: Converting a value to string in JavaScript 译...

    Alex 评论0 收藏0
  • 翻译:Javascript原始值解析

    摘要:结论最后证明相对于对原始值赋值,给对象赋值是它的一个唯一优势。而且,原始值是不可变的,你不可能通过改变他们的属性值来修改他们。而且,我认为对原始值深刻的理解,以及当使用他们的时候知道具体发生了什么是深入理解这门语言迈出重要的一步。 第一次翻译,可能有很多地方不恰当,欢迎指正。 原文地址:http://javascriptweblog.wordpress.com/2010/09/27/...

    yeyan1996 评论0 收藏0
  • JavaScript隐式类型转换

    摘要:所谓装箱转换,正是把基本类型转换为对应的对象,他是类型转换中一种相当重要的种类。拆箱转换在标准中,规定了函数,它是对象类型到基本类型的转换即,拆箱转换。拆箱转换会尝试调用和来获得拆箱后的基本类型。 JavaScript隐式类型转换 基本数据类型 ECMAScript 一共定义了七种 build-in types,其中六种为 Primitive Value,Null, Undefined...

    bingo 评论0 收藏0
  • JS淬炼: Primitive vs. Object

    摘要:值传递引用传递是值传递,是引用传递。但这影响会根据父类是属于还是而有微妙差别。我们设想有一个父类,和两个继承了他的子类和。这时,子类修改该不会影响到父类本身,更不会传递到其他子类上。 Javascript有两种基本数据类型,Primitive和Object。Object是properties的聚合,其property可以是Object也可以是Primitive。Primitive只有v...

    Hancock_Xu 评论0 收藏0
  • JavaScript 类型的那些事

    摘要:类型判断类型检测主要包括了和的三种方式来判断变量的类型。对于这里的返回的确却是,,有些人说被认为是没有一个对象。但是各种运算符或条件判断中是需要特定类型的,比如判断时会将判断语句转换为布尔型。顾名思义就是将变量转换为对象类型。 概述 JavaScript的类型判断是前端工程师们每天代码中必备的部分,每天肯定会写上个很多遍if (a === xxx)或if (typeof a === o...

    lwx12525 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<