JS基礎知識(一)變數型別和計算
變數型別和計算
問題:
-
JS中使用typeof能得到哪些型別
- 何時使用=== 何時使用==
-
JS有哪些內建函式
- JS變數按照儲存方式區分為哪些型別,並描述其特點
- 如何理解JSON
知識點:
1.變數型別
(1)值型別vs 引用型別
值型別:把變數的值都存在變數的一個位子裡。
引用型別:把屬性存在物件裡,通過指標來指向物件。
//值型別 var a =100;var b =a; a //100 b //100 a=200 //200 b //100
a,b為值型別,將a的值賦值給b,值型別都自己管自己的,改了就是自己的改了,跟別人沒關係。
//引用型別
var a= {age:20}
var b = a
b
//{age: 20}
a
//{age: 20}
b.age=21
//21
a
//{age: 21}
a,b為物件,為引用型別。引用型別為屬性存在物件裡,通過指標來取得。那些值都是共享的,他們都指向相同的一個物件時,那個物件改變了,所有指向他的都跟著改變了。
引用型別:物件,函式,陣列都是屬於引用型別。
引用型別可以可以無限擴充套件屬性,共用空間。
//引用型別擴充套件屬性(物件) var a= {age:20} a.age //20 a.name='aa' //"aa" a.bb='true' //"true" a //{age: 20, name: "aa", bb: "true"}
//引用型別擴充套件屬性(陣列)
var arr = [1,2,3]
arr.age=21
//21
var arr2 = arr
arr.age=22
//22
arr
//(3) [1, 2, 3, age: 21]
arr2
//(3) [1, 2, 3, age: 21]
arr2.a=2
//2
arr
//(3) [1, 2, 3, age: 21, a: 2]
arr2
//(3) [1, 2, 3, age: 21, a: 2]
引用型別共同指向以後,無論是先者還是後者,指向的都是同一個了。
//引用型別擴充套件屬性(函式) function fn() {} fn //ƒ fn() {} fn.age=21 //21 var fn1 =fn fn1.age //21 fn1.age=22 //22 fn.age //22
(2)typeof變數型別
一共有六種:undefined,boolean,string,number,object,function
//typeof
typeof undefined //undefined
typeof '123' //string
typeof NaN //number
typeof 123 //number
typeof true //boolean
typeof {} //object
typeof [] //object
typeof null //object
typeof Function //function
注意: null也是物件,typeof不能區分物件和陣列,將其都視為object,只能區別出function。以及之前的,物件,陣列,函式都是引用型別。想要區分陣列和物件 需要使用instanceof
2.變數計算
涉及到一個“強制型別轉化”
(1)字串拼接
以+例子
當型別相同的進行+,例如數字進行時,會是數字型別的,當數字和字串相加,會將其轉化成字元進行拼接。
//字串拼接
100+10
//110
100+'10'
//"10010"
(2)==運算子
//==運算子
100 == '100'
//true
''==0
//true
100==='100'
//false
''===0
//false
null == undefined
//true
null ===undefined
//false
==運算子其實是比較其中的值是否相等,而===還會判斷其型別是否相等。例如‘’ 空字元 以及0 都被轉化成false。以及null,undefined也被轉化成false.而第一個將100轉成了字串進行比較。
(3)if運算子
//if運算子
if(100){console.log(100)}
//100
if(''){console.log(100)}
//undefined
自動轉化成boolean進行判別。
if中認為是false的幾個值:0,NaN,null,'',undefined
if(0){console.log('1')}
//undefined
if(NaN){console.log('1')}
//undefined
if(null){console.log('1')}
//undefined
if(''){console.log('1')}
//undefined
if(undefined){console.log('1')}
//undefined
(4)邏輯運算
10 && 0
//0
''||'abc'
//"abc"
!window.abc
//true
&&與
||或
!非
快速判斷一個值是true還是false:!!
var a = 100;
!!a
//true
var b =''
!!b
//false
3.內建函式 (9種)
Object
//ƒ Object() { [native code] }
Array
//ƒ Array() { [native code] }
Function
//ƒ Function() { [native code] }
Boolean
//ƒ Boolean() { [native code] }
Number
//ƒ Number() { [native code] }
String
//ƒ String() { [native code] }
Date
//ƒ Date() { [native code] }
RegExp
//ƒ RegExp() { [native code] }
Error
//ƒ Error() { [native code] }
4.JSON
json有點像Math,是JS裡的一個物件。
JSON(JavaScript Object Notation, JS 物件簡譜) 是一種輕量級的資料交換格式
json有兩個方法,parse,stringify.
parse:轉化為物件
stringify:轉化為字串
JSON.stringify({ x: 5 }); // '{"x":5}'
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON
//JSON {parse: ƒ, stringify: ƒ, Symbol(Symbol.toStringTag): "JSON"}
Math
//Math {abs: ƒ, acos: ƒ, acosh: ƒ, asin: ƒ, asinh: ƒ, …}
JSON也是一個數據格式
.json
問題解決:
-
JS中使用typeof能得到哪些型別
undefined,string,number,boolean,object,function. - 何時使用=== 何時使用==
一般都是使用===會更好,除了一種情況。//jQuery原始碼中 If(obj.a == null) Obj.a===null || obj.a ===undefined
-
JS有哪些內建函式
Object,String,Number,Boolean,Array,Function,Date,RegExp,Error - JS變數按照儲存方式區分為哪些型別,並描述其特點
儲存方式,存在系統中記憶體中的方式。
值型別:分塊存在記憶體中,互相不干涉
引用型別:共用一個記憶體塊,相互干涉,共享,節省資源 - 如何理解JSON
JS裡的一個物件,像Math一樣。有兩個方法stringify,parse。同時也是一種資料格式.json