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

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

一、JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
目前最新的 JS 定義了七種數(shù)據(jù)類型。
數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
字符串(string):字符組成的文本(比如"Hello World")
布爾值(boolean):true(真)和false(假)兩個特定值
undefined:表示“未定義”或不存在,即由于目前沒有定義,所以此處暫時沒有任何值
null:表示無值,即此處的值就是“無”的狀態(tài)。
對象(object):各種值組成的集合
通常,我們將數(shù)值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了。而將對象稱為合成類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。至于undefined和null,一般將它們看成兩個特殊值。

對象又可以分成三個子類型。

狹義的對象(object)
數(shù)組(array)
函數(shù)(function)

參考: JavaScript 數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu) | MDN

二、typeof 和 instanceof 的作用和區(qū)別?

  1. typeof
    typeof返回一個字符串,表示指定對象的類型,可能的返回值有:
    undefined ==> undefined
    null || object ==> object
    boolean ==> boolean
    number ==> number
    string ==> string
    symbol ==> symbol
    function ==> function

如:
let str ='apple'console.log(typeof str) // string

  1. instanceof
    instanceof用來檢測指定對象是否擁有某構(gòu)造函數(shù)的prototype屬性,返回布爾值,如
    let num = new Number( 2 )console.log(num instanceof Number) //true

  2. 區(qū)別
    typeof用于判斷一個變量的類型,而instanceof用于判斷一個對象是否是另一對象的實例。

三、如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)
用typeof直接判斷,返回的字符串就是該類型

四、NaN 是什么? 有什么特別之處?
NaN(Not a Number)表示非數(shù)值,可以理解為是一個不確定的數(shù)值。所以:
所有與 NaN 的操作結(jié)果返回都是 NaN。
NaN === NaN 返回 false。

正是因為 NaN 表示不確定數(shù)值,所以每一個 NaN 都不確定,就不相等。

五、如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
parseInt() 函數(shù)解析一個字符串參數(shù),并返回一個指定基數(shù)的整數(shù) (數(shù)學(xué)系統(tǒng)的基礎(chǔ))。
The parseFloat() function parses an argument and returns a floating point number.
Number()
In JavaScript, Number is a numeric data type in the double-precision 64-bit floating point format (IEEE 754). In other programming languages different numeric types can exist, for examples: Integers, Floats, Doubles, or Bignums.
Number.parseInt() 方法可以根據(jù)給定的進(jìn)制數(shù)把一個字符串解析成整數(shù)。

六、== 與 === 有什么區(qū)別
== 相等運(yùn)算符,在比較不同類型的數(shù)據(jù)時,相等運(yùn)算符會先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,然后再用嚴(yán)格相等運(yùn)算符比較。
=== 嚴(yán)格運(yùn)算符,兩個比較值必須是同一類型的同一結(jié)果。

七、break 與 continue 有什么區(qū)別
break表示退出當(dāng)前循環(huán)或者退出指定循環(huán),是徹底結(jié)束循環(huán)。continue是結(jié)束本次循環(huán),進(jìn)入下一次循環(huán)。

八、void 0 和 undefined 在使用場景上有什么區(qū)別
void是一元操作符,你可以在后面接一條語句,但void返回的永遠(yuǎn)是undifined。而undefined在 ES5 中是全局對象的一個只讀(read-only)屬性了,它不能被重寫。但在局部作用域中還是可以改寫:
(function () { var undefined = 1 console.log(undefined)})()
因此,當(dāng)你需要百分比獲得undefined時,可以用void 0 void console.log(1) void false等等等,最后返回的都是undefined,因為 void 0很短,所以就用它。
參考:為什么用 void 0 代替 undefined | GitHub

九、以下代碼的輸出結(jié)果是?為什么?
console.log(1+1) //2 number
console.log("2"+"4") //24 string
console.log(2+"4") //24 string
console.log(+"4") //4 number
打印出執(zhí)行結(jié)果,number 類型相加按照數(shù)學(xué)方法,number 與 string 相加相當(dāng)于字符串拼接。

十、以下代碼的輸出結(jié)果是?為什么?
var a = 1 // a === 1
a+++a // a === 2
typeof a+2 // number2
a+++a可以拆分為(a++) + a,所以只有第一次的自加有改變a的值,typeof優(yōu)先級極高,所以實際上運(yùn)行的是(typeof a) + 2
a++ 按照順序理解,先使用,后 + 1;
++a 按照順序理解,先加一,后使用;

a++ ++a.png

十一、以下代碼的輸出結(jié)果是?為什么?
var a = 1
var b = 3
console.log( a+++b ) /// 4
拆分下:console.log((a++) + b),a++實際是先使用a的值再自加,所以結(jié)果是console.log(a + b)。假如換成++a的話,結(jié)果就是console.log(1 + a + b)了,可以試下。

十二、遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
var arr = [3, 4, 5]
var i = 0
while (i < arr.length) { console.log(arr[i] * arr[i]) i++}

clipboard.png

十三、遍歷 JSON, 打印里面的值
var obj = { name: 'hunger', sex: 'male', age: 28 }
for (var key in obj) { console.log(obj[key])}

clipboard1.png

十四、以下代碼輸出結(jié)果是? 為什么?

clipboard2.png

/typeof 優(yōu)先級高, || 或運(yùn)算只有真的值有效,都為假返回 false,所以上面可以拆解為: val = (typeof a) + b 。前面已經(jīng)是真,后面語句被短路,不在執(zhí)行后面的代碼

補(bǔ)充:

1、只要“||”前面為false,不管“||”后面是true還是false,都返回“||”后面的值。

2、只要“||”前面為true,不管“||”后面是true還是false,都返回“||”前面的值。

我稱這種為短路原理: 知道了前面第一個的結(jié)果就知道后的輸出,如果為第一個為:true,則取第一個的值,如果第一個為false,則取第二個的值。

js請你一定要記住:在js邏輯運(yùn)算中,0、”“、null、false、undefined、NaN都會判為false,其他都為true。這個一定要記住,不然應(yīng)用||和&&就會出現(xiàn)問題。

這里順便提下:看到很多代碼if(!!attr),為什么不直接寫if(attr);

其實這是一種更嚴(yán)謹(jǐn)?shù)膶懛ǎ?br> 請測試 typeof 5和typeof !!5的區(qū)別。!!的作用是把一個其他類型的變量轉(zhuǎn)成的bool類型。

clipboard3.png

//與運(yùn)算符為真就一直運(yùn)行下去,最后一個,為假直接返回 false,所以:data = console.log('bb') 。而console.log()的返回是 undefined

補(bǔ)充:

1、只要“&&”前面是false,無論“&&”后面是true還是false,結(jié)果都將返“&&”前面的值;

2、只要“&&”前面是true,無論“&&”后面是true還是false,結(jié)果都將返“&&”后面的值;

clipboard4.png

//同理可拆分成:data2 = d = console.log('haha')

clipboard5.png

//取反運(yùn)算符,結(jié)果不是 true 就是 false;逗號操作符,返回最后一條語句結(jié)果,所以: x = !!"Hello" + !!"from here!!"。即 x = true + true,對布爾值進(jìn)行運(yùn)算,計算機(jī)直接轉(zhuǎn)化為對應(yīng)的 0 和 1

參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
http://www.itdecent.cn/p/f75c81d01a1b

最后編輯于
?著作權(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ù)。

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