進(jìn)階-任務(wù)2

JavaScript 定義了幾種數(shù)據(jù)類(lèi)型? 哪些是原始類(lèi)型?哪些是復(fù)雜類(lèi)型?原始類(lèi)型和復(fù)雜類(lèi)型的區(qū)別是什么?

  • 數(shù)據(jù)類(lèi)型
    number, string, boolean, object,undefined, null
  • 原始數(shù)據(jù)類(lèi)型
    number, string, boolean,
  • 復(fù)雜類(lèi)型
    object
  • 原始類(lèi)型和復(fù)雜類(lèi)型的區(qū)別
    原始類(lèi)型是最基本的數(shù)據(jù)類(lèi)型,不能再細(xì)分了。
    復(fù)雜類(lèi)型往往是多個(gè)原始類(lèi)型的值的合成,可以看作是一個(gè)存放各種值的容器。

typeof和instanceof的作用和區(qū)別?

  • typeof運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類(lèi)型:
    數(shù)值、字符串、布爾值分別返回number、string、boolean;
    函數(shù)返回function;
    undefined返回undefined;
    除此以外,其他情況都返回object;
  • instanceof可以判斷是不是某個(gè)構(gòu)造函數(shù)的實(shí)例
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true

因此instanceof可以用來(lái)區(qū)分?jǐn)?shù)組和對(duì)象

如何判斷一個(gè)變量是否是數(shù)字、字符串、布爾、函數(shù)

function isNumber(a) {
  return typeof a == 'number';
}
function isString(a) {
  return typeof a == 'string';
}
function isBoolean(a) {
  return typeof a == 'boolean';
}
function isFunction(a) {
  return typeof a == 'function';
}

NaN是什么? 有什么特別之處?

  • NaN非數(shù)值
  • NaN和任何值都不相等,包括自己
NaN == NaN  // false

如何把非數(shù)值轉(zhuǎn)化為數(shù)值?

  • Number()
  • parseInt()
  • parseFloat()

==與===有什么區(qū)別

1.==

  • 相等運(yùn)算符比較相同類(lèi)型的數(shù)據(jù)時(shí),與嚴(yán)格相等運(yùn)算符完全一樣。
  • 比較不同類(lèi)型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類(lèi)型轉(zhuǎn)換,然后再用嚴(yán)格相等運(yùn)算符比較:
    原始類(lèi)型的數(shù)據(jù)會(huì)轉(zhuǎn)換成數(shù)值類(lèi)型再進(jìn)行比較;
    對(duì)象(這里指廣義的對(duì)象,包括數(shù)組和函數(shù))與原始類(lèi)型的值比較時(shí),對(duì)象轉(zhuǎn)化成原始類(lèi)型的值,再進(jìn)行比較;
    undefined和null與其他類(lèi)型的值比較時(shí),結(jié)果都為false,它們互相比較時(shí)結(jié)果為true;
    2.===
  • 如果兩個(gè)值的類(lèi)型不同,直接返回false;
  • 同一類(lèi)型的原始類(lèi)型的值(數(shù)值、字符串、布爾值)比較時(shí),值相同就返回true,值不同就返回false;
  • 兩個(gè)復(fù)合類(lèi)型(對(duì)象、數(shù)組、函數(shù))的數(shù)據(jù)比較時(shí),不是比較它們的值是否相等,而是比較它們是否指向同一個(gè)對(duì)象;
  • 注意,對(duì)于兩個(gè)對(duì)象的比較,嚴(yán)格相等運(yùn)算符比較的是地址,而大于或小于運(yùn)算符比較的是值。

break與continue有什么區(qū)別

  • break是跳出循環(huán)體,執(zhí)行下一條語(yǔ)句
  • continue是跳出本次循環(huán),執(zhí)行下一次循環(huán)

void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別

  • undefined可能會(huì)被賦值
  • 而void 0永遠(yuǎn)返回真是的undefined,void 0用來(lái)在if判斷時(shí)代替真實(shí)的undefined

以下代碼的輸出結(jié)果是?為什么?

console.log(1+1);        // 2
console.log("2"+"4");  // "24" 
console.log(2+"4");    // "24"
console.log(+"4");      // 4
  • 如果運(yùn)算子是對(duì)象,先自動(dòng)轉(zhuǎn)成原始類(lèi)型的值;
  • 兩個(gè)運(yùn)算子都是原始類(lèi)型的值以后,只要有一個(gè)運(yùn)算子是字符串,則兩個(gè)運(yùn)算子都轉(zhuǎn)為字符串,執(zhí)行字符串連接運(yùn)算。
  • 否則,兩個(gè)運(yùn)算子都轉(zhuǎn)為數(shù)值,執(zhí)行加法運(yùn)算。
  • 加法運(yùn)算符一定有左右兩個(gè)運(yùn)算子,如果只有右邊一個(gè)運(yùn)算子,就是另一個(gè)運(yùn)算符,叫做“數(shù)值運(yùn)算符”,值運(yùn)算符用于返回右邊運(yùn)算子的數(shù)值形式。

以下代碼的輸出結(jié)果是?

var a = 1; 
a+++a;  
typeof a+2;    //'number2'

以下代碼的輸出結(jié)果是? 為什么

 var a = 1;
 var b = 3;
 console.log( a+++b );    //4

相當(dāng)于(a++)+b,即1+3=4

遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方 var arr = [3,4,5]

for (var i=0; i<arr.length; i++) {
  console.log(arr[i]*arr[i]);
}

遍歷 JSON, 打印里面的值

var obj = {
name: 'hunger',
sex: 'male',
age: 28
}

for (var key in obj) {
  console.log(obj[key]);
}

以下代碼輸出結(jié)果是? 為什么 (選做題目)

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)   // "number2"

var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)    // 'bb'

var data2 = d = 0 || console.log('haha')
console.log(data2)    //'haha'
 
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)    // 2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容