前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《你不知道的JavaScript》:js常见值类型的坑

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

作者头像
前端_AWhile
发布2019-08-29 11:15:07
7170
发布2019-08-29 11:15:07
举报
文章被收录于专栏:前端一会前端一会

再来看下js中的值类型。

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

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

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

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

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

代码语言:javascript
复制
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中的字符串是不可变的,而数组是可变的。字符串不可变是指字符串的成员函数不会改变其原始值,而是创建并返回一个新的字符串。而数组的成员函数都是在其原始值上进行操作的。

代码语言:javascript
复制
var a = "nitx";
var c = a.toUpperCase();
a === c;        //  fasle
console.log(a);     // nitx
console.log(c);     // NITX

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

代码语言:javascript
复制
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.

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

代码语言:javascript
复制
var a = "nitx";
var c = a.split("").reverse().join("");
console.log(c);     // xtin

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档