最近在看JS红皮书是游乐园一些理解和收获,特写一篇文章记录这些收获。
本文的方法和一些术语和定义来自《JavaScript高级程序设计》第三版。
一、Array类型
数组类型我相信使用JS的同学一定不会陌生,然而JS的数组类型与其他语言的数组类型有着很大的区别。
1.判断数据类型。
在JS中有一个常用的JS数据类型判断方法---typeof
typeof会以字符串形式返回数据的类型,如下所示
console.log(typeof 'this is string') // string console.log(typeof 123) // number console.log(typeof true) // boolean console.log(typeof a) // undefind console.log(typeof {a:1,b:2}) // object console.log(typeof null) // object console.log(typeof [1,2,3,4,5]) // object
但我们会发现,typeof无法判断一个数据是否为数组类型,那么该怎么判断一个数据是否是数组数据呢?
第一种方法就是使用 instanceof 操作符,看下面的代码
console.log([1,2,3,4,5,6] instanceof Array); // true console.log([1,2,3,4,5,6] instanceof Object); // true console.log({a:1,b:2} instanceof Object); // true console.log(123 instanceof Number); // false console.log(true instanceof Boolean); // false console.log( 'this is string' instanceof String); // false console.log(true instanceof Object); // false console.log( 'this is string' instanceof Object); // false console.log(null instanceof Object) // false
在代码中,我们很清楚的看到 instanceof 是可以判断一个数据是否是数组数据,但也可以看到很多其他问题。
第二种方法就是在ES5中一些数据结构新加的判断方法,看代码
console.log(Array.isArray([1,2,3,4,5,6])); // true console.log(Number.isInteger(123)); // false
所以当遇到问题是,使用合理的方法将会事半功倍。
2. 转换方法。
JS的所有对象都拥有toLocaleString(),toString(),valueOf()三个方法,使用方法如下代码
let arr=['1','2','3']; console.log(arr.toString()) // 1,2,3 console.log(arr.valueOf()); // ['1','2','3']
toSting()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。这个过程中,会对数组中每一项调用toString()。
数组调用valueOf()会返回数组本身。
toLocaleString()方法经常会返回和toString()一样的值,但也并不绝对,我们看一下代码
let obj1={ toLocaleString:function(){ return 'obj1' }, toString:function(){ return 'obj1-1' } } let obj2={ toLocaleString:function(){ return 'obj2' }, toString:function(){ return 'obj2-2' } } let obj=[obj1,obj2]; console.log(obj); // Array[] console.log(obj.toString()); // obj1-1,obj2-2 console.log(obj.toLocaleString()) // obj1,obj2
这里我们将obj1和obj2的toLocaleString(),toString()方法进行了重写,以便能够看到效果。
上面代码可以看到,使用toLocaleString()时数组内的每一项调用的时toLocaleString()而不是toString(),这就是上面说不绝对的原因。
上述的方法在进行转换时会默认使用 ‘,’ 来分割各项。当然,我们可以使用join()方法来改分割方式。
let arr=['1','2','3']; console.log(arr.join('||')) // 1||2||3 console.log(arr.join('')) // 123
就像上面的代码一样。
今天就先记录到这里,之后会继续记录。