1. 程式人生 > >JS基礎知識(一)變數型別和計算

JS基礎知識(一)變數型別和計算

變數型別和計算

問題:

  1. JS中使用typeof能得到哪些型別

  2. 何時使用=== 何時使用==
  3. JS有哪些內建函式

  4. JS變數按照儲存方式區分為哪些型別,並描述其特點
  5. 如何理解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

 

 

問題解決:

  1. JS中使用typeof能得到哪些型別
    undefined,string,number,boolean,object,function.

  2. 何時使用=== 何時使用==

     一般都是使用===會更好,除了一種情況。
    //jQuery原始碼中
    If(obj.a == null)
    Obj.a===null || obj.a ===undefined

     

  3. JS有哪些內建函式
    Object,String,Number,Boolean,Array,Function,Date,RegExp,Error

  4. JS變數按照儲存方式區分為哪些型別,並描述其特點
    儲存方式,存在系統中記憶體中的方式。
    值型別:分塊存在記憶體中,互相不干涉
    引用型別:共用一個記憶體塊,相互干涉,共享,節省資源
  5. 如何理解JSON

         JS裡的一個物件,像Math一樣。有兩個方法stringify,parse。同時也是一種資料格式.json