數據類型運算符流程控制語句

1.JavaScript 定義了幾種數據類型?哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?
一共有六種數據類型(es6新增symbol7種數據類型)
原始:string、boolean、number symbol
復雜:object因為它可以看做存放原始類型的容器,把對象細分又可以分為數組array、函數function、正則表達式regexp
特殊類型:null、undefined

  1. typeof和instanceof的作用和區別?
    typeof 用于返回一個數據的原始類型,對于常見的幾個數據類型都可以用typeof的方式來進行判斷
    typeof能夠判斷原始類型和undefined、function,但是不能用來判斷對象類型和null,因為都會返回object。
    還可以利用typeof來判斷變量是否存在,不能直接使用if(a),因為如果a沒有聲明就會報錯。
if (typeof a === 'undefined') {
    //a不存在
}

instanceof運算符時js語言中原生的用來判斷實例繼承關系的操作符。判斷一個實例是否屬于某種類型,所以只能判斷對象和函數,不能判斷字符串和數字。

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

instanceof用法

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

NaN全名,Not a Number,但是NaN是number類型的值表示非數字,NaN和任何值都不相等,包括自己。
當算術計算后,計算結果無法轉化為JS可顯示的數字類型或是結果無法轉換成數字類型時,返回NaN

  • 如何把非數值轉化為數值?
    三個方法
    parseInt()將參數轉化為整數
    parseFloat()將參數轉化成浮點數
    number()將參數轉換成數字類型
    六、==與===的區別
    ==只用等號兩邊的參數經過隱式類型轉換后值相等即可輸出true
    ===需要兩邊結果必須嚴格相等,參數不經過隱式的類型轉換
    七、break和continune的區別
    break:強制退出循環體(作用域)返回上一個作用域continue;跳過該次循環,開始下一次循環
  • void 0 和 undefined在使用場景上有什么區別?
    undefined 在 ES5 中已經是全局對象的一個只讀(read-only)屬性了,它不能被重寫。但是在局部作用域中,還是可以被重寫的。
    所以undefined現常用于全局環境
void 運算符通常只用于獲取 undefined 的原始值,一般使用 void(0)(等同于 void 0)。在上述情況中,也可以使用全局變量undefined 來代替(假定其仍是默認值)。

而 void 可以給任何給定的表達式求值,并返回 undefined,并且 void 不可被重寫,因此void 0是在局部作用域中替代undefined的最佳選擇

Snip20170219_2.png

從用 void 0 代替 undefined 說起 ——伯樂在線2
void 運算符 ——MDN1
代碼題

console.log(1+1);   //2 
console.log("2"+"4");  //字符串拼接24
console.log(2+"4");  //數字轉換為字符串拼接,但是如果是減法就是字符串轉換為數字再相減
console.log(+"4"); //4 在字符串前加上計算符號,計算會嘗試將字符串轉換成數字
var a = 1;  
a+++a;  //3 因為++的優先級比+高所以相當于(a++)+a; 1+2=3
typeof a+2; // "number2" typeof優先級相當高此時就相當于先typeof a再加上2,"number"+2="number2"。一般要對typeof后的表達式加上括號。
 var a = 1;
 var b = 3;
 console.log( a+++b ); //4 也是++優先級大于+的原因

4.//遍歷數組,把數組里的打印數組每一項的平方

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) && 表達式的值執行結果是underfined)最后data結果是underfined

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



var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) //2字符串前加!強制轉換成布爾值,并轉換成false
!!代表雙重否定 結果為true
//逗號是兩個表達,兩個表達式求職返回后一個表達式的值
簡計:typeof優先級
+-優先級
與或運算符
等于號的優先級比逗號要高
Snip20170223_1.png
注意:個人寫的話要記得加括號
與或
前面結果為true后面就不再計算了
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容