1.JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?
-
JavaScript定義了六種數據類型。
- 數值(number):整數和小數(比如1和3.14)
- 字符串(string):字符組成的文本(比如"Hello World")
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在,即此處目前沒有任何值
- null:表示空缺,即此處應該有一個值,但目前為空
- 對象(object):各種值組成的集合,對象有三個子類型狹義的對象(object),數組(array),函數(function)。
- Symbol 是一種特殊的、不可變的數據類型,可以作為對象屬性的標識符使用。(Symbol 生成一個全局唯一的值)
-
原始類型
- 數值
- 字符串
- 布爾值
- Symbol
-
復雜類型
- 對象
至于undefined和null,一般將它們看成兩個特殊值。
-
區別
- 數值、字符串、布爾值稱為原始類型(primitive type),即它們是最基本的數據類型,不能再細分了。
- 對象稱為負載類型(complex type),因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
2.typeof和instanceof的作用和區別?
- typeof 是用于返回一個數據其原始的數據類型,對于常見的幾大數據類型都可以用typeof 數據類型的方式進行判斷。
typeof "ABC" // string
typeof true // boolean
typeof 112 // number
typeof undefined // undefined
typeof null // object
typeof function (){} // function
typeof {} // object
typeof [] // object
- instanceof 它用于判斷一個變量是否是某個對象的實例。
var o = {};
var a = [];
o instanceof Array // false
o instanceof Object //true Array 是Object的子類,所以也是true
a instanceof Array // true
3.如何判斷一個變量是否是數字、字符串、布爾、函數
var a = 變量;
console.log(typeof a);
4.NaN是什么? 有什么特別之處?
- NaN含義是Not a Number,表示非數字,NaN和任何值都不相等,包括自己
NaN == NaN; //false
parseInt('abc'); //NaN
5.如何把非數值轉化為數值?
- 有三個函數可以把非數值轉換為數值
- Number()
- parseInt()
- parseFloat()
- Number規則相當復雜而且不合理,幾乎不使用,常用的是后兩個,兩個規則類似
1.忽略字符串前面的空白字符,找到第一個非空白字符
2.如果第一個字符不是-
或者數字返回NaN
3.如果是繼續解析,直到非數值模式為止
4.0開頭會當做八進制,0x開頭會當做十六進制,但是可以指定第二個參數指定基數
parseInt('blue'); //NaN
parseInt('-23ABS'); // -23
parseInt('0xf1'); // 241
parseInt('101', 2); // 5
6.==與===有什么區別
- 對于string,number等基礎類型,==和===是有區別的
- 不同類型間比較,==比較轉化成同一類型后的值看“值”是否相等,===如果類型不同,其結果就是不等
- 同類型比較,直接進行“值”比較,兩者結果一樣
- 對于Array,Object等高級類型,==和===是沒有區別的
- 進行“指針地址”比較
7.break與continue有什么區別
- break關鍵字在switch語句中已經見過,這兩個關鍵字多用在循環語句中
- break 用于強制退出循環體,執行循環后面的語句
- continue 用于退出本次循環,執行下次循環
8.void 0 和 undefined在使用場景上有什么區別
- undefined在局部作用域內是會被覆蓋的,比如 var a,沒有賦值前a是undefined,經過一系列運算后,a有值了,就會被賦予新的值,a不再為undefined。
- void 0,則是在void運算后,無論結果如何,都會返回undefined。
9.以下代碼的輸出結果是?為什么?
console.log(1+1); // 2 數值相加
console.log("2"+"4"); // "24" 字符串拼接
console.log(2+"4"); // "24" 數字轉換為字符串進行拼接
console.log(+"4"); // 4 在只有一個字符串參數的時候會嘗試將其轉換為數字
10.以下代碼的輸出結果是?
var a = 1;
a+++a; // a++ + a ==> 1+2=3 ++的優先級比+高
typeof a+2; // (typeof a) + 2 ==> "number2" typeof優先級高
11.以下代碼的輸出結果是?為什么?
var a = 1;
var b = 3;
console.log( a+++b ); //a++ + b ==> 1+3=4 ++的優先級比+高
12.遍歷數組,把數組里的打印數組每一項的平方
var arr = [3,4,5];
for(var i=0;i<arr.length;i++){
console.log(arr[i] * arr[i]);
}
9
16
25
13. 遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for (i in obj) {
console.log(obj[i]);
}
hunger
male
28
14. 以下代碼輸出結果是? 為什么
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
//"number2"
// (typeof a)+b 為 "number2" c>0為false
//結果為 "number2"
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
//bb undefined
//d ==5為true typeof console.log('bb')的類型"undefined"為false
//結果為輸出dd,data為undefined
var data2 = d = 0 || console.log('haha')
console.log(data2)
//haha undefined
//先 0 || console.log('haha')
// 0為false,typeof console.log('haha')的類型"undefined"為false
//結果為輸出haha,data2為undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
//2
//先 (!"world", !!"from here!!") 為(true,false), 由于( 1 , 2 )忽略第一個操作數,返回第二個操作數,為false
// !!"Hello"為true
//true + true 同為布爾型相加轉換為數值相加
//結果為2