JavaScript 定義了幾種數(shù)據(jù)類(lèi)型? 哪些是原始類(lèi)型?哪些是復(fù)雜類(lèi)型?原始類(lèi)型和復(fù)雜類(lèi)型的區(qū)別是什么?
JS定義了6種數(shù)據(jù)類(lèi)型:
- 數(shù)值類(lèi)型
- 字符串類(lèi)型
- 布爾值
- undefined
- null
- Object
原始類(lèi)型:數(shù)值,字符串,布爾值唱捣。它們是最基本的數(shù)據(jù)類(lèi)型不可在細(xì)分了时迫。
復(fù)雜類(lèi)型:對(duì)象摆尝。對(duì)象是由多個(gè)原始類(lèi)型的值組成的集合,可以看做是存放各種值的容器。(ps對(duì)象細(xì)分的話又可以分為: 對(duì)象,函數(shù),正則表達(dá)式和數(shù)組)
null和undefined是特殊類(lèi)型的值!!
簡(jiǎn)單細(xì)說(shuō)下null與undefined:
null 與 undefined的含義與用法都差不多,都是表示"沒(méi)有"灵嫌。但是它們二者是有區(qū)別的!
null 表示一個(gè)值被定義了,定義為"空值"葛作。
undefined 表示根本不存在定義!!
借用網(wǎng)上大神的一段證明:設(shè)置一個(gè)值為null是合理的,比如objA.value1 = null;但是如果設(shè)置objA.value1 = undefined就不合理了寿羞。
原始類(lèi)型與復(fù)雜類(lèi)型的區(qū)別:
- 基本類(lèi)型變量存的是值,復(fù)雜類(lèi)型的變量存的是內(nèi)存地址
- 基本類(lèi)型在賦值的時(shí)候拷貝值赂蠢,復(fù)雜類(lèi)型在賦值的時(shí)候只拷貝地址绪穆,不拷貝值。
typeof和instanceof的作用和區(qū)別?
typeof 是一元運(yùn)算符虱岂,用來(lái)獲取運(yùn)算數(shù)的數(shù)據(jù)類(lèi)型霞幅。返回的值有undefined,boolean,number,string,null,object.而對(duì)象,數(shù)組和null遇到typeof會(huì)返回object量瓜。當(dāng)要判斷某個(gè)對(duì)象是否是數(shù)組或者某個(gè)變量是否是對(duì)象的實(shí)例時(shí)就要使用instanceof, instanceof用來(lái)判斷某個(gè)變量的值是否是某個(gè)對(duì)象的實(shí)例,返回值有true和false.
如何判斷一個(gè)變量是否是數(shù)字途乃、字符串绍傲、布爾、函數(shù)
console.log(typeof x === "number")
console.log(typeof x === "string")
console.log(typeof x === "boolean")
console.log(typeof x === "function")
NaN是什么? 有什么特別之處?
NaN是Not a Number,表示非數(shù)字,與任何值都不相等耍共,包括它自身烫饼。
如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
- Number()
- parseInt()
- parseFloat()
==與===有什么區(qū)別
==是值相等,js會(huì)在一些情況下進(jìn)行隱式的類(lèi)型轉(zhuǎn)換再進(jìn)行比較试读。
===是嚴(yán)格相等(包括值和類(lèi)型)
break與continue有什么區(qū)別
break - 跳出整個(gè)循環(huán)杠纵;如果是多層f循環(huán),跳出當(dāng)前for循環(huán),而不是整個(gè)循環(huán)钩骇。
continue - 跳出本次循環(huán)比藻,執(zhí)行下個(gè)循環(huán)。
void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別?
undefined 不能被重寫(xiě)倘屹。但是在局部作用域中银亲,還是可以被重寫(xiě)的。
所以u(píng)ndefined現(xiàn)常用于全局環(huán)境
void 運(yùn)算符通常只用于獲取 undefined 的原始值纽匙,一般使用 void(0)(等同于 void 0)务蝠。在上述情況中,也可以使用全局變量undefined 來(lái)代替(假定其仍是默認(rèn)值)烛缔。
而 void 可以給任何給定的表達(dá)式求值馏段,并返回 undefined,并且 void 不可被重寫(xiě)轩拨,因此void 0是在局部作用域中替代undefined的最佳選擇
以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); // 2 因?yàn)槎际菙?shù)字所以會(huì)做加法運(yùn)算
console.log("2"+"4"); // 24 因?yàn)槎际亲址詴?huì)做字符串拼接
console.log(2+"4"); // 24 在有一個(gè)參數(shù)是字符串的情況下會(huì)把另外一個(gè)參數(shù)轉(zhuǎn)換為字符串做字符串拼接
console.log(+"4"); // 4 在只有一個(gè)字符串參數(shù)的時(shí)候會(huì)嘗試將其轉(zhuǎn)換為數(shù)字
以下代碼輸出的結(jié)果是?
var a = 1;
a+++a;
typeof a+2;
因?yàn)椋臋?quán)重大于+院喜,所以a+++是(a++)+a,而a++=1之后a=2, 1+2=3,所以a+++a=3, typeof的權(quán)重又比+ 高,所以(typeof a)+2,故最后得出"number2"亡蓉。
以下代碼輸出的結(jié)果是?為什么够坐?
var a = 1;
var b = 3;
console.log( a+++b );
最后得出4,因?yàn)?+的權(quán)重比+高,故得(a++)+b, a++=1, 1+3=4寸宵。
遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
var arr = [3,4,5];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]*arr[i]);
}
遍歷JSON,打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var i in obj){
console.log(obj[i]);
}