JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區(qū)別是什么?
js共定義了六種數(shù)據(jù)類型
- 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
- 字符串(string):字符組成的文本(比如"Hello World")
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在,即此處目前沒有任何值
- null:表示空缺,即此處應該有一個值,但目前為空
- 對象(object):各種值組成的集合
數(shù)值、字符串、布爾值稱為原始類型的值
將對象稱為復雜類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
至于undefined和null,一般將它們看成兩個特殊值。
typeof和instanceof的作用和區(qū)別?
兩者均用于判斷數(shù)據(jù)類型
- typeof 是用于返回一個數(shù)據(jù)其原始的數(shù)據(jù)類型,對于常見的幾大數(shù)據(jù)類型都可以用typeof 數(shù)據(jù)類型的方式進行判斷.
- 但是數(shù)據(jù)類型無法判斷對象的具體實例,typeof對于數(shù)組與對象所返回的值均為object。這時候就需要用instanceof對他們進行具體區(qū)分
如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)
數(shù)字,字符串,布爾,函數(shù)這些均可用typeof進行直接判斷
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
function f() {}
typeof f
// "function"```
###NaN是什么? 有什么特別之處?
NaN含義是Not a Number,表示非數(shù)字,NaN和任何值都不相等,包括自己.但他卻屬于number類型
###如何把非數(shù)值轉化為數(shù)值?
三種方法
1. Number()
2. parseInt() 字符串轉為整數(shù)。
- 忽略字符串前面的空白字符,找到第一個非空白字符
` parseInt(' 81') // 81`
- 如果第一個字符不是-或者數(shù)字返回NaN
`parseInt('blue'); //NaN`
- 如果parseInt的參數(shù)不是字符串,則會先轉為字符串再轉換。
parseInt(1.23) // 1
// 等同于
parseInt('1.23') // 1```
- 0開頭會當做八進制,0x開頭會當做十六進制,但是可以指定第二個參數(shù)指定基數(shù)
parseInt('0xf1'); // 241
parseInt('101', 2); // 5```
- 字符串轉為整數(shù)的時候,是一個個字符依次轉換,如果遇到不能轉為數(shù)字的字符,就不再進行下去,返回已經轉好的部分。
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15```
- parseFloat() 用于將一個字符串轉為浮點數(shù)。
- 如果字符串包含不能轉為浮點數(shù)的字符,則不再進行往后轉換,返回已經轉好的部分。
parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14```
- parseFloat方法會自動過濾字符串前導的空格。
parseFloat('3.14more non-digit characters') // 3.14
parseFloat('\t\v\r12.34\n ') // 12.34```
- 如果參數(shù)不是字符串,或者字符串的第一個字符不能轉化為浮點數(shù),則返回NaN.
parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN```
- 注意,parseFloat會將空字符串轉為NaN。這些特點使得parseFloat的轉換結果不同于Number函數(shù)。
parseFloat(true) // NaN
Number(true) // 1
parseFloat(null) // NaN
Number(null) // 0
parseFloat('') // NaN
Number('') // 0
parseFloat('123.45#') // 123.45
Number('123.45#') // NaN```
==與===有什么區(qū)別
===是嚴格相等,==是值相等,js會在一些情況下進行隱式的類型轉換再進行比較。一般最好用嚴格相等,以防出錯
break與continue有什么區(qū)別
break 用于強制退出循環(huán)體,執(zhí)行循環(huán)后面的語句continue 用于退出本次循環(huán),執(zhí)行下次循環(huán)
void 0 和 undefined在使用場景上有什么區(qū)別
void運算符的作用是執(zhí)行一個表達式,然后返回undefined。
而undefined在函數(shù)中可以被賦值
以下代碼的輸出結果是?為什么?
console.log(1+1); 結果為2,此為數(shù)值1+1則結果為2
console.log("2"+"4"); 結果為“24”,字符串的相加
console.log(2+"4"); 結果為“24”有一個參數(shù)是字符串,會把另外一個參數(shù)轉換為字符串進行拼接
console.log(+"4");只有一個字符串,將其轉換為數(shù)字```
###以下代碼的輸出結果是?
var a = 1; 1賦值給變量a
a+++a; ++優(yōu)先級大于+,先執(zhí)行a++,再加a
typeof a+2; typeof優(yōu)先級高于+所以先執(zhí)行typeof a。所以最終結果為“number2”```
以下代碼的輸出結果是? 為什么
var b = 3;
console.log( a+++b ); 結果為4,++優(yōu)先級高于+,a++進行自增運算,先計算后賦值,即先用后賦值,則為1+b則為4```
### 遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
```var arr = [3,4,5]```
for(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])}```
以下代碼輸出結果是? 為什么
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) ```
輸出結果為“number2”,因為優(yōu)先級typeof>+>大于號>||。所以先計算typeofa為number,+b則變?yōu)椤皀umber2”,||前面為true,則后面無論true或false則都輸出前面的值
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)```
結果為“bb”,邏輯與,前面為false則結果為false,否則看后面值。此題d==5為true,則看后面結果為bb則最終data值為“bb”
var data2 = d = 0 || console.log('haha')
console.log(data2)```
結果為“haha”,邏輯或,前面為true,則結果為true,否則看后面值,此題d=0為false,則看后面結果為“haha”
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)```
結果為2,先算括號中!"world"結果為false,!!"from here!!"結果為true。則括號中結果取后值為true,!!"hello"結果為true。則x=true+true最終結果為2