专栏首页前端一会《你不知道的JavaScript》:js常见值类型的坑

《你不知道的JavaScript》:js常见值类型的坑

再来看下js中的值类型。

常见的值类型有数组(array)、字符串(string)、数字(number)等。

js中的数组可以容纳任何类型的值,可以是字符串、数字、布尔、对象甚至也可以是数组。对数组声明后即可向其中加入值,无需预先设定大小。这里有个小注意点,虽然可以用delete关键字来将单元从数组中删除,但单元删除后,数组的length属性并不会发生变化。

在创建稀疏数组(即含有空白或空缺单元的数组)时,其中的空白单元的值为undefined,但与将该单元显式赋值为undefined是有微妙区别的,这里注意。

类数组可以通过数组工具函数转换成数组。类数组有DOM查询返回的DOM元素列表、arguments对象等。

工具函数slice()经常被用于这类转换:

function foo(){
    var arr = Array.prototype.slice.call(arguments);
    arr.push("bar");
    console.log(arr);
}
foo("baz", "fn");       //["baz", "fn", "bar"]

上例中,slice()方法返回了类数组arguments的一个数组副本。

再来看字符串,字符串也是一种类数组,也有length属性,也有一些和数组一样的方法如indexOf()concat()方法等。js中的字符串是不可变的,而数组是可变的。字符串不可变是指字符串的成员函数不会改变其原始值,而是创建并返回一个新的字符串。而数组的成员函数都是在其原始值上进行操作的。

var a = "nitx";
var c = a.toUpperCase();
a === c;        //  fasle
console.log(a);     // nitx
console.log(c);     // NITX

许多数组函数也可以借用来处理字符串,非常好使的:

var a = "nitx";
console.log(a.join);    // undefined
console.log(a.map);     // undefined
var c = Array.prototype.join.call(a, "-");
var d = Array.prototype.map.call(a, function(v){
    return v.toUpperCase() + ".";
}).join("");
console.log(c);     // n-i-t-x
console.log(d);     // N.I.T.X.

借用数组成员函数的典型应用场景是字符串的反转:

var a = "nitx";
var c = a.split("").reverse().join("");
console.log(c);     // xtin

这种方法是将字符串通过split()方法转成数组,然后使用数组的reverse()反转,再用join()方法重新拼成字符串。

之所以不能使用之前的Array.prototype.reverse().call()方法来直接反转字符串,就因为字符串是不可变的

当如果有复杂字符串需要进行反转时,还不如直接使用数组,然后在需要字符串时,直接用join()方法转成字符串即可。

本文分享自微信公众号 - 前端小二(frontendxiao2),作者:小二君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • javascript设计模式六:发布-订阅模式(观察者模式)

    发布-订阅模式也叫观察者模式,是js开发中应用广泛的一种模式。下面将列举一个通用发布订阅模式的示例,应用到闭包、this、apply/call、自执行函数等概念...

    前端_AWhile
  • JS数组的创建与使用方法

    前端_AWhile
  • 《你不知道的JavaScript》:Promise使用的较佳实践

    Promise的设计局限性有一个让人掉坑的地方,即Promise链中错误容易被无意中默默忽略掉。

    前端_AWhile
  • Python基础之str常用方法、for循环

    还有一个方法index,它和find作用类似,通过元素找索引,不同点是:找不到指定的字符则会报错!

    爱学习的孙小白
  • 【LeetCode11】反转字符串

    这道题比较简单,唯一可能需要注意的就是需要空间复杂度为O(1),也就是说不可以另外新建数据来储存元素,所以,我们可以尝试用双指针,从列表的两端,头尾交换位置即可...

    Sam Gor
  • C语言第一个字符串Hello,C语言基础教程之字符串

    C 语言中,字符串实际上是使用 null 字符 '' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

    猫咪爱分享
  • Shell脚本编程

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • 10个有关String的面试问题

    下面是面试中最容易问到的有关String的问题。

    Java后端工程师
  • 提取数字——字符串、正则面试题

    提取数字——字符串、正则面试题 HTML5学堂:正则、数组、字符串,是JavaScript语言中让人头痛的一些知识,今天这篇文章我们使用数组字符串、正则两种方法...

    HTML5学堂
  • NumPy Ndarray对象

    拾点阳光

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动