1. 程式人生 > 實用技巧 >JS的一些資料型別的方法和函式

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

就像上面的程式碼一樣。

今天就先記錄到這裡,之後會繼續記錄。