JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區(qū)別是什么?##
- 數(shù)值(number):包括整數(shù)和小數(shù)
- 字符串(string) :字符組成的文本
- 布爾值(Boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在,即由于目前沒有定義,所以此處暫時沒有任何值
- null:表示無值,即此處的值就是“無”的狀態(tài)。
- 對象(object):各種值組成的集合
我們將數(shù)值、字符串、布爾值稱為原始類型,對象為復雜類型,而undefined和null,一般將它們看成兩個特殊值。區(qū)別就是原始類型是最基本的數(shù)據(jù)類型,不能再細分了,而對象往往是多個原始類型的集合,可以看成是一個存放各種數(shù)據(jù)的容器。
typeof和instanceof的作用和區(qū)別?##
typeof 返回一個數(shù)據(jù)原始的數(shù)據(jù)類型,結(jié)果是一個字符串,可以用typeof 數(shù)據(jù)的方式判斷常見的幾大數(shù)據(jù)類型
instanceof 需要兩個參數(shù),用于判斷一個變量是否為某個對象的實例,結(jié)果是一個布爾值。
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true
如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)?##
typeof可以判斷一個值的數(shù)據(jù)類型:
typeof 123 // "number" /*數(shù)值返回"number"*/
typeof '123' // "string" /*字符串返回"string"*/
typeof false // "boolean" /*布爾值返回"boolean"*/
/*函數(shù)返回"function"*/
function f() {}
typeof f // "function"
/*undefined 返回 undefined*/
typeof undefined // "undefined"
/* 其余的返回object*/
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
除此以外,其他情況都返回object。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
NaN是什么? 有什么特別之處?##
NaN含義是Not a Number,表示非數(shù)字,NaN和任何值都不相等,NaN不等于自己
如何把非數(shù)值轉(zhuǎn)化為數(shù)值?##
Number() /*轉(zhuǎn)換為整數(shù)或浮點數(shù)*/
parseInt() /*轉(zhuǎn)換為整數(shù)*/
parseFloat() /*轉(zhuǎn)換為浮點數(shù)*/
==與===有什么區(qū)別?##
==和===是比較運算符。比較運算符比較兩個值,然后返回一個布爾值,表示是否滿足比較條件
==表示相等,不同類型的值進行比較時,會進行類型轉(zhuǎn)換,類型相同后再進行值的比較;
===表示嚴格相等,數(shù)據(jù)類型和值都相等時才輸出true,其中有一個不相等,則輸出false
break與continue有什么區(qū)別##
break用于強制退出循環(huán)體,執(zhí)行循環(huán)后面的語句
continue用于退出本次循環(huán),執(zhí)行下次循環(huán)
void 0 和 undefined在使用場景上有什么區(qū)別##
void 運算符會對給定的表達式進行計算,然后返回 undefined。
通常 void 0 會用來獲取 undefined。undefined 可能會被重寫,但是 void 0 返回的值一定會是 undefined。
以下代碼的輸出結(jié)果是?為什么?##
console.log(1+1); //2 2個運算子都是原始類型值,轉(zhuǎn)為數(shù)字,執(zhí)行加法運算
console.log("2"+"4"); //'24' 2個運算子都是原始類型值,只要有一個是字符串,則2個都轉(zhuǎn)為字符串,執(zhí)行連接運算
console.log(2+"4"); // '24' 2個運算子都是原始類型值,只要有一個是字符串,則2個都轉(zhuǎn)為字符串,執(zhí)行連接運算
console.log(+"4"); // 4 只有一個數(shù)字參數(shù)的時候返回其正值
var a = 1;
a+++a; //相當于(a++)+a a++先返回當前值為1,然后自增a為2,相當于1+2=3
typeof a+2; // 'number2' 相當于(typeof a)+2 'number'+2
var a = 1;
var b = 3;
console.log( a+++b ); //4 a++為1 b為3 相當于 1+3=4
遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
var arr = [3,4,5]
for (var i=0; i<arr.length; i++) {
console.log(arr[i]*arr[i])
}
// 輸出 9 16 25
** 遍歷 JSON, 打印里面的值**
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var key in obj) {
console.log(obj[key])
}
//輸出 hunger male 28
**以下代碼輸出結(jié)果是? 為什么 **
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
//typeof a 優(yōu)先級高,typeof a+b輸出'number2',或運算符第一個運算子布爾值為true,直接返回第一個的值,輸出 'number2'
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
//且運算符左邊布爾值為true,返回第二個運算子的值,所以輸出'bb',返回undefined
var data2 = d = 0 || console.log('haha')
console.log(data2)
//或運算符左邊d=0,布爾值為false,返回第二個運算子的值,輸出'haha',返回undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
//括號內(nèi),返回逗號后面的值,!!'from here!!'經(jīng)過2次取反運算符,值為true, !!'Hello' 經(jīng)過2次取反運算符,值為true,都是原始類型,轉(zhuǎn)化為數(shù)值相加,輸出2