數(shù)據(jù)類型 運算符 流程控制語句

  1. JavaScript 的數(shù)據(jù)類型
    6種
    number數(shù)值
    string 字符串" "
    boolean 布爾 true/false
    underfined 未定義或不存在
    null 有個值,為空
    Object對象 多種值的集合(對象有:函數(shù) 數(shù)組 正則 對象)
    Symbol (ECMAScript 6 新定義)

1.1 原始類型?復(fù)雜類型?

  • 原始類型: number string bollean
    基本數(shù)據(jù)類型,不能再細(xì)化了
  • 復(fù)雜類型 : Object 對象
    可以有多個原始類型組成,存放多種值的容器
  • 其他 underfined 和 null 可以看成兩個特殊的值

1.2 原始類型和復(fù)雜類型的區(qū)別?

  1. 基本類型變量存的是值,復(fù)雜類型的變量存的是內(nèi)存地址。
  2. 基本類型在賦值的時候拷貝值,復(fù)雜類型在賦值的時候只拷貝地址,不拷貝值。

假設(shè)有如下 JS 代碼:

var a = 1.23
var b = 3.14

基本類型

obj對象 復(fù)雜類型怎么存儲?看圖


復(fù)雜類型

原始類型與引用類型
參考文章1
參考文章2
參考文章3

  1. 檢查數(shù)據(jù)類型方法

typeof可以判斷 object number string underfined boolean,
array object function null 判斷不清晰,都為對象類型
所以typeof 一般多用于判斷基本類型

instanceof 可以判斷具體屬于哪一個數(shù)據(jù)類型,返回true false。

Object.prototype.toString 最好的一種方式,可以判斷一個變量的
具體類型

  1. 如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)
    用typeof 判斷數(shù)據(jù)類型 是否是 數(shù)字 字符串 布爾 對象
    然后用instanseof 判斷是否為函數(shù)
  1. NaN是什么? 有什么特別之處?
    not a number ,非數(shù)字,是number類型,但不表示任何一個有效數(shù)字
    特別之處: NaN和任意值都不相等,包括自己。

              NaN == NaN  //  false ,不相等
              NaN !== NaN ;   //true
    
  2. 如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
    三個函數(shù): Number() parseInt() parseFloat()

  3. ==與===有什么區(qū)別
    ==是近似相等,判斷值是否相等
    === 是絕對完全相等,判斷值和數(shù)據(jù)類型是否相等

  4. break與continue有什么區(qū)別
    break continue 經(jīng)常在循環(huán)語句中出現(xiàn),循環(huán)終止,跳出循環(huán)
    break 是循環(huán)終止,跳出循環(huán),不再執(zhí)行后面的循環(huán)
    continue 是跳出循環(huán),繼續(xù)執(zhí)行下一個循環(huán)

  5. void 0 和 undefined在使用場景上有什么區(qū)別

undefined是一個全局屬性,表示未定義或定義了沒有賦值。
void是一個一元運算符,不管傳入什么參數(shù)都會返回undefined
void 是為了兼容老的瀏覽器,IE7-11及主流瀏覽器
underfined 不能兼容IE7 8,見下面代碼

void操作符是在ECMAScript v1中定義的,而undefined是在ECMAScript v5中定義的。

我們知道undefined不是javascript的保留字,所以我們可以用undefined作為變量名。這時,我們定義的undefined就會影響到使用undefined作為判斷的地方??聪旅胬樱?/p>

測試了主流瀏覽器IE7-IE11、opera、firefox、safati、chrome

undefined=123;
alert(undefined);
//IE7、IE8是123,其余:IE9-IE11、opera、firefox、safati、chrome都是undefined
alert(void 0);
//IE7-IE11、opera、firefox、safati、chrome都是undefined

  1. 以下代碼的輸出結(jié)果是?為什么?
    console.log(1+1); //2
  • 操作數(shù)都是數(shù)字的時候做加法運算

console.log("2"+"4"); //24

  • string+string 字符串拼接

console.log(2+"4"); //24 2轉(zhuǎn)換為字符串,字符串再拼接

  • 兩個參數(shù)都是字符串或者一個參數(shù)是字符串的情況下,會把另一個參數(shù)轉(zhuǎn)換為字符串

console.log(+"4"); //4 4轉(zhuǎn)成數(shù)字

  • 只有一個字符串參數(shù)時,嘗試將其轉(zhuǎn)換為數(shù)字

運算符的優(yōu)先級順序

Paste_Image.png
  1. 以下代碼的輸出結(jié)果是?
    var a = 1;
    a+++a;
    typeof a+2;
    輸出 "number2"
    計算過程:
    1 .看優(yōu)先級 ,++ 優(yōu)先級高于+,根據(jù)優(yōu)先級先計算a++,再+

  2. a++ =2,但是a還是1,(a++)+a=3

  3. typeof的優(yōu)先級比+ 高,先執(zhí)行 typeof a ,也就是typeof 3
    返回"number", "number"+2 返回 "number2

  4. 以下代碼的輸出結(jié)果是? 為什么
    var a = 1;
    var b = 3;
    console.log( a+++b ); //輸出5
    因為++ 的優(yōu)先級比+高,先計算a++,然后在計算+b,a++有返回2,
    2+3=5

  5. 遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
    var arr = [3,4,5]
    for(var i=0;i<arr.length; i++){
    console.log(arr[i]* arr[i])
    }
    輸出結(jié)果:
    9
    16
    25

  6. 遍歷 JSON, 打印里面的值
    var obj = {
    name: 'hunger',
    sex: 'male',
    age: 28
    }
    for(var key in obj){
    console.log(obj[key])
    }
    輸出結(jié)果:
    hunger
    male
    28

  7. 以下代碼輸出結(jié)果是? 為什么 (選做題目)
    var a = 1, b = 2, c = 3;
    var val = typeof a + b || c >0
    console.log(val)
    輸出: number2
    考察到的點:優(yōu)先級順序: typeof > || + =
    || 邏輯運算符 有短路的功能 或運算時,一個為真就是真,則b是真,不需要再看第二個操作數(shù) ,所以 b=2, 輸出"2"

var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
輸出結(jié)果:console.log('bb') 輸出是“bb”, 但是返回的是undefined
true&& underfined ,根據(jù)與運算 ,返回第二個值underfined

1.&&運算規(guī)則
1.1 兩邊條件都為true時,結(jié)果才為true;

1.2 如果有一個為false,結(jié)果就為false;
1.3 當(dāng)?shù)谝粋€條件為false時,就不再判斷后面的條件

注意:當(dāng)數(shù)值參與邏輯與運算時,結(jié)果為true,那么會返回的會是第二個為真的值;
如果結(jié)果為false,返回的會是第一個為假的值。注意: data 和data2中的輸出結(jié)果都為underfined

var data2 = d = 0 || console.log('haha')
console.log(data2)
輸出結(jié)果: haha underfined
console.log('haha'),輸出是“haha”, 返回undefined
d=0 也是 underfined ,underfined或underfined, 輸出第一個undefined

var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
輸出結(jié)果 : 2
true+ (false + true )
1+ (0+1)=2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容