变量类型和计算
问题:
-
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