數(shù)據(jù)類型運(yùn)算符流程控制語(yǔ)句

1.JavaScript 定義了幾種數(shù)據(jù)類型?哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
一共有六種數(shù)據(jù)類型(es6新增symbol7種數(shù)據(jù)類型)
原始:string、boolean、number symbol
復(fù)雜:object因?yàn)樗梢钥醋龃娣旁碱愋偷娜萜鳎褜?duì)象細(xì)分又可以分為數(shù)組array、函數(shù)function、正則表達(dá)式regexp
特殊類型:null、undefined

  1. typeof和instanceof的作用和區(qū)別?
    typeof 用于返回一個(gè)數(shù)據(jù)的原始類型,對(duì)于常見(jiàn)的幾個(gè)數(shù)據(jù)類型都可以用typeof的方式來(lái)進(jìn)行判斷
    typeof能夠判斷原始類型和undefined、function,但是不能用來(lái)判斷對(duì)象類型和null,因?yàn)槎紩?huì)返回object。
    還可以利用typeof來(lái)判斷變量是否存在,不能直接使用if(a),因?yàn)槿绻鸻沒(méi)有聲明就會(huì)報(bào)錯(cuò)。
if (typeof a === 'undefined') {
    //a不存在
}

instanceof運(yùn)算符時(shí)js語(yǔ)言中原生的用來(lái)判斷實(shí)例繼承關(guān)系的操作符。判斷一個(gè)實(shí)例是否屬于某種類型,所以只能判斷對(duì)象和函數(shù),不能判斷字符串和數(shù)字。

function Foo(){}
var foo = new Foo();
console.log(foo instanceof Foo); //true

instanceof用法

  • 如何判斷一個(gè)變量是否是數(shù)字、字符串、布爾、函數(shù)。NaN是什么? 有什么特別之處?
    利用typeof就能判斷原始類型和函數(shù)。Object.prototype.toString.call();檢測(cè)
object.prototype.toString.call檢測(cè)

NaN全名,Not a Number,但是NaN是number類型的值表示非數(shù)字,NaN和任何值都不相等,包括自己。
當(dāng)算術(shù)計(jì)算后,計(jì)算結(jié)果無(wú)法轉(zhuǎn)化為JS可顯示的數(shù)字類型或是結(jié)果無(wú)法轉(zhuǎn)換成數(shù)字類型時(shí),返回NaN

  • 如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
    三個(gè)方法
    parseInt()將參數(shù)轉(zhuǎn)化為整數(shù)
    parseFloat()將參數(shù)轉(zhuǎn)化成浮點(diǎn)數(shù)
    number()將參數(shù)轉(zhuǎn)換成數(shù)字類型
    六、==與===的區(qū)別
    ==只用等號(hào)兩邊的參數(shù)經(jīng)過(guò)隱式類型轉(zhuǎn)換后值相等即可輸出true
    ===需要兩邊結(jié)果必須嚴(yán)格相等,參數(shù)不經(jīng)過(guò)隱式的類型轉(zhuǎn)換
    七、break和continune的區(qū)別
    break:強(qiáng)制退出循環(huán)體(作用域)返回上一個(gè)作用域continue;跳過(guò)該次循環(huán),開(kāi)始下一次循環(huán)
  • void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別?
    undefined 在 ES5 中已經(jīng)是全局對(duì)象的一個(gè)只讀(read-only)屬性了,它不能被重寫。但是在局部作用域中,還是可以被重寫的。
    所以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 不可被重寫,因此void 0是在局部作用域中替代undefined的最佳選擇

Snip20170219_2.png

從用 void 0 代替 undefined 說(shuō)起 ——伯樂(lè)在線2
void 運(yùn)算符 ——MDN1
代碼題

console.log(1+1);   //2 
console.log("2"+"4");  //字符串拼接24
console.log(2+"4");  //數(shù)字轉(zhuǎn)換為字符串拼接,但是如果是減法就是字符串轉(zhuǎn)換為數(shù)字再相減
console.log(+"4"); //4 在字符串前加上計(jì)算符號(hào),計(jì)算會(huì)嘗試將字符串轉(zhuǎn)換成數(shù)字
var a = 1;  
a+++a;  //3 因?yàn)?+的優(yōu)先級(jí)比+高所以相當(dāng)于(a++)+a; 1+2=3
typeof a+2; // "number2" typeof優(yōu)先級(jí)相當(dāng)高此時(shí)就相當(dāng)于先typeof a再加上2,"number"+2="number2"。一般要對(duì)typeof后的表達(dá)式加上括號(hào)。
 var a = 1;
 var b = 3;
 console.log( a+++b ); //4 也是++優(yōu)先級(jí)大于+的原因

4.//遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方

function print(){
for( var i=0;i<arguments.length;i++){
console.log(arguments[i]*arguments[i]);
}
}
print(3,4,5);
//遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for (key in obj) {
console.log(obj[key]);
}

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,'data') //( (d ==5) && 表達(dá)式的值執(zhí)行結(jié)果是underfined)最后data結(jié)果是underfined

var data2 = d = 0 || console.log('haha')
console.log(data2,'data2') //underfined
//d=0false 取后面的結(jié)果為underfined賦值給data2
var data2 = d = 1 || console.log('haha')
console.log(data2,'data2') //1
//d=0false 取后面的結(jié)果為underfined賦值給data2
||前面為真就賦予前面的,如前面不是真就賦予后面的值
 



var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) //2字符串前加!強(qiáng)制轉(zhuǎn)換成布爾值,并轉(zhuǎn)換成false
!!代表雙重否定 結(jié)果為true
//逗號(hào)是兩個(gè)表達(dá),兩個(gè)表達(dá)式求職返回后一個(gè)表達(dá)式的值
簡(jiǎn)計(jì):typeof優(yōu)先級(jí)
+-優(yōu)先級(jí)
與或運(yùn)算符
等于號(hào)的優(yōu)先級(jí)比逗號(hào)要高
Snip20170223_1.png
注意:個(gè)人寫的話要記得加括號(hào)
與或
前面結(jié)果為true后面就不再計(jì)算了
最后編輯于
?著作權(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)容