JS的一些数据类型的方法和函数

最近在看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

 

 

 

就像上面的代码一样。

 

今天就先记录到这里,之后会继续记录。

上一篇:理顺 JavaScript (11) - 数组


下一篇:toLocaleString()