在JavaScript的世界里,一切都是對象。但是某些對象還是和其他對象不太一樣。為了區(qū)分對象的類型,我們用typeof操作符獲取對象的類型,它總是返回一個字符串。如:
typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'
可見,number、string、boolean、function和undefined有別于其他類型。特別注意null的類型是object,Array的類型也是object,如果我們用typeof將無法區(qū)分出null、Array和通常意義上的object——{}。
1、一些類型使用規(guī)則:
(1)用parseInt()或parseFloat()來轉(zhuǎn)換任意類型到number;
(2)用String()來轉(zhuǎn)換任意類型到string,或者直接調(diào)用某個對象的toString()方法。需要注意,null和undefined沒有toString()方法,而number調(diào)用它也會報錯,所以還是別用toString了
(3)typeof操作符可以判斷出number、boolean、string、function和undefined,其余的都是object類
(4)判斷Array要使用Array.isArray(arr);
(5)判斷null請使用myVar === null;
(6)判斷某個全局變量是否存在用typeof window.myVar === 'undefined';
(7)函數(shù)內(nèi)部判斷某個變量是否存在用typeof myVar === 'undefined'
2、Date對象用來表示日期和時間,如:
var now = new Date();
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范圍是0~11,5表示六月
now.getDate(); // 24, 表示24號
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小時制
now.getMinutes(); // 49, 分鐘
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒數(shù)
now.getTime(); // 1435146562875, 以number形式表示的時間戳
(1)JavaScript的Date對象月份值從0開始,牢記0=1月,1=2月,2=3月,……,11=12月
(2)now.toLocaleString():本地時間
(3)new.toUTCString():UTC時間
(4)時間戳:一個自增的整數(shù),它表示從1970年1月1日零時整的GMT時區(qū)開始的那一刻,到現(xiàn)在的毫秒數(shù)
3、RegExp:正則表達式
4、在JavaScript中,我們可以直接使用JSON,因為JavaScript內(nèi)置了JSON的解析。
(1)對象序列化為JSON:JSON.stringify(xiaoming, null, '? ')。注意,第三個參數(shù)是為了好看而傳入了縮進
(2)第二個參數(shù)用于控制如何篩選對象的鍵值,如果我們只想輸出指定的屬性,可以傳入Array,如JSON.stringify(xiaoming, ['name', 'skills'], '? ');
(3)第二個參數(shù)還可以傳入一個函數(shù),這樣對象的每個鍵值對都會被函數(shù)先處理,如:
function convert(key, value) {
? ? if (typeof value === 'string') {
? ? ? ? return value.toUpperCase();
? ? }
? ? return value;
}
JSON.stringify(xiaoming, convert, '? ');
結(jié)果所有屬性值都變成了大寫。
(4)如果我們還想要精確控制如何序列化小明,可以給xiaoming定義一個toJSON()的方法,直接返回JSON應該序列化的數(shù)據(jù):
var xiaoming = {
? ? name: '小明',
? ? age: 14,
? ? gender: true,
? ? height: 1.65,
? ? grade: null,
? ? 'middle-school': '\"W3C\" Middle School',
? ? skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
? ? toJSON: function () {
? ? ? ? return { // 只輸出name和age,并且改變了key:
? ? ? ? ? ? 'Name': this.name,
? ? ? ? ? ? 'Age': this.age
? ? ? ? };
? ? }
};
JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'
(5)JSON.parse():將JSON字符串反序列化為一個js對象,如:
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
(6)JSON.parse()還可以接收一個函數(shù),用來轉(zhuǎn)換解析出的屬性,如:
var obj = JSON.parse('{"name":"小明","age":14}', function (key, value) {
? ? if (key === 'name') {
? ? ? ? return value + '同學';
? ? }
? ? return value;
});
console.log(JSON.stringify(obj)); // {name: '小明同學', age: 14}