JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?
- 共有六種
數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
字符串(string):字符組成的文本(比如"Hello World")
布爾值(boolean):true(真)和false(假)兩個特定值
undefined:表示“未定義”或不存在,即此處目前沒有任何值
null:表示空缺暑竟,即此處應(yīng)該有一個值斋射,但目前為空
對象(object):各種值組成的集合
-
原始類型
數(shù)值、字符串但荤、布爾值,即基本數(shù)據(jù)類型
哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
-
對象是復(fù)雜類型,分成三個子類型
狹義的對象(object)
數(shù)組(array)
函數(shù)(function)
正則表達式 (regexp) - 區(qū)別
1 一個對象往往是多個原始類型的值的合成罗岖,可以看作是一個存放各種值的容器;
2 基本類型變量存的是值,復(fù)雜類型的變量存的是內(nèi)存地址;
3 基本類型在賦值的時候拷貝值腹躁,復(fù)雜類型在賦值的時候只拷貝地址桑包,不拷貝值;
typeof和instanceof的作用和區(qū)別?
-
typeof運算符 :可以返回一個值的數(shù)據(jù)類型.用來檢測一個對象是否已經(jīng)定義或者是否賦值.
1)原始類型
數(shù)值、字符串纺非、布爾值分別返回number哑了、string、boolean铐炫。
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
2)函數(shù)返回function垒手。
3)undefined返回undefined。
4)除此以外倒信,其他情況都返回object科贬。
-
instanceof
instanceof主要的目的是檢測引用類型,判斷對象是Array,還是RegExp
var array=new Array();
var object=new Object();
var regexp=new RegExp();
function func(){};
var func1=new func();
alert(array instanceof Array); //true
alert(object instanceof Object); //true
alert(regexp instanceof RegExp); //true
alert(func1 instanceof func); //true
-
區(qū)別
ypeof和instanceof的目的都是檢測變量的類型,兩個的區(qū)別在于typeof一般是檢測的是基本數(shù)據(jù)類型,instanceof主要檢測的是引用類型!
如何判斷一個變量是否是數(shù)字、字符串、布爾榜掌、函數(shù)
typeof 1 // "number"
typeof "asd" // "string"
typeof true // "boolean"
typeof function{alert("asd");} // "function"```
## NaN是什么? 有什么特別之處?
- NaN(Not a number)优妙,表示非數(shù)字,NaN和任何值都不相等,自己不等于自己:
`NaN == NaN //false`
## 如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
- parseInt()將參數(shù)轉(zhuǎn)化為整數(shù)
parseFloat()將參數(shù)轉(zhuǎn)化成浮點數(shù)
number()將參數(shù)轉(zhuǎn)換成數(shù)字類型
## ==與===有什么區(qū)別
- ===不會自動轉(zhuǎn)換數(shù)據(jù)類型,只當(dāng)**數(shù)據(jù)類型和值兩者都一致**才返回ture;NaN和自身不相等.
而==會自動轉(zhuǎn)換數(shù)據(jù)類型再比較,若值相等則返回ture.
## break與continue有什么區(qū)別
- break 用于強制退出循環(huán)體憎账,執(zhí)行循環(huán)后面的語句
- continue 用于退出本次循環(huán)套硼,執(zhí)行下次循環(huán)
for(var i = 1; i< 10; i++){
if(i % 4 === 0){
break; //若執(zhí)行到這一步,就終止外面的for循環(huán)體.
}
console.log(i);
}
for(var i = 1; i< 10; i++){
if(i % 4 === 0){
continue; //若執(zhí)行到這一步,就跳過 i = 4的打印結(jié)果.然后繼續(xù)i = 5的計算.
}
console.log(i);
}
## void 0 和 undefined在使用場景上有什么區(qū)別
- **void 0**:它是一個一元操作符,它的唯一作用就是返回一個undefined胞皱,不管這個操作符后面?zhèn)鞯牟僮鲾?shù)是什么
1.點擊不做跳轉(zhuǎn)
<a href="javascript:void(0);">
Click here to do nothing
</a>```
2.用于閉包避免解析錯誤
void function fn(){
console.log("I will show immediately.")
}()
為什么不直接使用undefined這個值的字面量形式呢邪意?
:因為undefined
既不是保留字,也不是關(guān)鍵字反砌,它可以作為變量標識符賦值雾鬼,所以你手寫出來的undefined是有可能被覆蓋的
-
undefined
(1)變量被聲明了,但沒有賦值時宴树,就等于undefined策菜。
(2) 調(diào)用函數(shù)時,應(yīng)該提供的參數(shù)沒有提供酒贬,該參數(shù)等于undefined又憨。
(3)對象沒有賦值的屬性,該屬性的值為undefined锭吨。
(4)函數(shù)沒有返回值時蠢莺,默認返回undefined。
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); // 2
原因: 都是數(shù)值類型相加.1+1=2.
console.log("2"+"4");// "24"
: 字符串拼接.
console.log(2+"4"); // "24"
: 一個數(shù)值與一個字符串相加時,會把其中的數(shù)值轉(zhuǎn)為字符串,結(jié)果就是2個字符串拼接.
console.log(+"4");// 4
:+會將字符串轉(zhuǎn)換為數(shù)字.
以下代碼的輸出結(jié)果是?
var a = 1;
a+++a;
typeof a+2;//"number2"
因為:
var a = 1;
(a++)+a; //1+1=2
(typeof a)+2; //"number"+2="number2"
以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );//4
: ( a+++b )= (a++)+b;
而(a++)+b=1+3=4;
遍歷數(shù)組耐齐,把數(shù)組里的打印數(shù)組每一項的平方
var arr = [3,4,5]
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
}
答:
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(i in obj){ console.log(i+":"+ obj[i])}
以下代碼輸出結(jié)果是? 為什么 (選做題目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) //number2
: 因為typeof的優(yōu)先級較高所以typeof a 為number浪秘,此后又與b拼接為"number2",對于||運算符,兩邊都為true則返回前者
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)//"bb"
:因為&&左邊為true,
而對于 expr1 && expr2,如果expr1 能轉(zhuǎn)換成false則返回expr1,否則返回expr2.
var data2 = d = 0 || console.log('haha')
console.log(data2)//"haha"
: ||的左邊=0,即false
對于expr1 || expr2,如果expr1能轉(zhuǎn)換成true則返回expr1,否則返回expr2
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)//2
:右邊為 ture+ (false,true). = 1+1=2
運算符:
Paste_Image.png