JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?
JavaScript語言的每一個值,都屬于某一種數據類型。JavaScript的數據類型,共有六種。
- 數值(number):整數和小數(比如1和3.14)
- 字符串(string):字符組成的文本(比如"Hello World")
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在,即此處目前沒有任何值
- null:表示空缺,即此處應該有一個值,但目前為空
- 對象(object):各種值組成的集合
數值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是
最基本的數據類型,不能再細分了。
將對象稱為復雜類型(complex type)的值,因為一個對象往往是多個> > 原始類型的值的合成。
注意:undefined和null,一般將它們看成兩個特殊值。
typeof和instanceof的作用和區別?
在變量和值上調用typeof,將返回一個字符串,這個字符串標示了這個變量或值的類型。如果這個變量或值是一個引用類型將會返回"object"。如果是原始類型輸出結果如下:
typeof "ABC" ==> string
typeof true ==> boolean
typeof 112 ==> number
typeof undefined ==> undefined
typeof null ==> object
typeof function (){} ==> function
typeof {} ==> object
typeof [] ==> object
- typeof在運算一個引用類型時,總是返回object。不能判斷這個引用類型是數組還是對象,這時就可以用instanceof,它用于判斷一個變量是否是某個對象的實例:
var o = {};
var a = [];
o instanceof Array ==> false
o instanceof Object ==> true // Array 是Object的子類,所以結果是 true
a instanceof Array ==> true
延伸閱讀 : instanceof 復雜用法
如何判斷一個變量是否是數字、字符串、布爾、函數
運用 typeof 運算符和判斷符 "==="
typeof 123 === 'number' // 判斷是否是數字
typeof '123' === 'string' // 判斷是否為字符串
typeof true ==='boolean' // 判斷是否為布爾
typeof a ==='function' // 判斷是否為函數
注:"==" 在比較的時候,會進行類型轉換,而 "===" 則不會
NaN是什么? 有什么特別之處?
NaN含義是Not a Number,表示非數字,NaN和任何值都不相等,包括自己。
如何把非數值轉化為數值?
借助函數可完成
- Number()
- parseInt()
- parseFloat()
數值轉化
==與===有什么區別
- == 相等
- === 嚴格相等
“==” 判等會在比較時進行類型轉換;"===" 判等不會進行類型轉換(如果類型不同會直接返回 false )
break與continue有什么區別
- break 用于強制退出循環體,執行循環后面的語句
- continue 用于退出本次循環,執行下次循環
比如:
while(x++ < 10)
{
if(x == 3)
{
break;
}
printf("%d\r\n", x);
}
結果是 12
但是如果使用continue
while(x++ < 10)
{
if(x == 3)
{
continue;
}
printf("%d\r\n", x);
}
結果是:1 2 4 5 6 7 8 9 10
可見他僅僅是不輸出3,因為他結束了本次循環
void 0 和 undefined在使用場景上有什么區別
void 會執行后面的表達式并返回 undefined,
undefinded表示變量聲明但是未初始化的值。
- 區別:void 0返回值一定是undefined,undefined卻可以在局部作用域內被賦其它值
以下代碼的輸出結果是?為什么?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
```
>
```
console.log(1+1); =====> 2 兩個數字加法運算
console.log("2"+"4"); =====> "24" +號的任意一邊是字符串,則做字符串拼接
console.log(2+"4"); =====>"24",+號的任意一邊是字符串,則做字符串拼接
```
```
var a = 1;
a+++a;
typeof a+2;
```
> "numbe2"
```
var a = 1;
var b = 3;
console.log( a+++b );
```
> 輸出4;因為++比+的優先級高,所以相當于(a++)+b=(1++)+3=1+3=4
遍歷數組,把數組里的打印數組每一項的平方
---
```
var arr = [3,4,5]
```
>
```Javascript
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 a in obj) {
console.log(obj[a]);
}
```
以下代碼輸出結果是? 為什么
---
```
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
var data2 = d = 0 || console.log('haha')
console.log(data2)
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
```
>
```
console.log(val)
//優先級:typeof, +, >, || 依次運算輸出結果為:"number2"
console.log(data)
//輸出:bb undefined
console.log('bb')先執行輸出bb,&&前為ture,console.log('bb')不返回布爾值,返回undefined,所以data為undefined。
console.log(data2)
//輸出:haha undefined console.log('haha')先執行輸出haha,||優先級高于=,比較0和console.log('haha'),輸出undefined,右結合賦值給data2,所以data2為undefined
console.log(x)
//輸出:2 空字符串為false,非空則為true,var x = true+(false+true),true為1,1+1=2。
```