- JS中使用typeof能得到的哪些类型
- 何时使用
===
何时使用==
- JS中有哪些内置函数
- JS变量按照存储方式区分为哪些类型,并描述其特点
- 如何理解JSON
1 变量类型
值类型 VS 引用类型
值类型:
- 数据之间是值类型的:number、string、boolean、null、undefined
- 把每一个值存放在对应变量内存的位置,数据分块存放在内存中,数据之间不会相互影响
var a = 100;var b = a;a = 200;console.log(b); //100
引用类型
- 数据是引用类型的:对象、数组、函数(object、array、function)
- 把a赋值成一个对象,这个对象存在另一个地方,a内存的位置通过指针指向这个对象的地方,把b赋值成a时,其实是定义了一个b,b的指针又指向对象的位置,变量实际上是1个真实对象的指针
- 好几个变量共用1个内存块,节省内存空间,赋值只是变量指针的赋值,并不是每次赋值都把对象真正的值复制一份,所以值的修改相互干预
- 产生原因:若a赋值成一个对象,特别大,a再赋值给b,b也会占很大的空间,不合理,所以引用类型是为了让内存共用空间
- 运行过程:执行完1、2行代码后,
age = 20
这个对象是1份不是2份,只不过a和b同时指向了这个对象,第3行b.age = 21
时,对象的值改成了21,a也指向这个对象,所以a.age
也是21 - 特点:无限制扩展属性,比如说对象有个age属性,可以加第2个属性name属性
var a = { age:20};var b = a;b.age = 21;conlose.log(a.age) //21
typeof运算符详解
- typeof可以识别6种数据类型(识别出来的结果):undefined、string、number、boolean、object、function
typeof null -> object
,null是一个特殊的对象,它是1个空的指针,定义了1个位置,但未指向任何一个引用类型的1个真实的对象,但是类型仍是object- typeof运算符:只能区分值类型的详细类型,引用类型无法细分
- 引用类型只能区分出function,除了function,其它的引用类型是区分不出来了。因为函数是一个十分特殊的引用类型,在js中函数的地位非常高,所以需要在任何地方轻松判断出这个是函数,所以typeof单独把函数列出来
// 前4种都可以识别出来,因为都是值类型typeof undefined //undefinedtypeof 'abc' //stringtypeof 123 //numbertypeof true //boolean// 后4种无能为力,识别出来只能是object/function,因为是引用类型typeof { } //objecttypeof [] //objecttypeof null //objecttypeof console.log //function
2 变量计算
- 针对值类型,需要强制类型转换
- 针对引用类型,需要API支持,是一种功能类型的计算,并不是变量本身发生变化的计算,只是更改对象内部属性
针对值类型的强制类型转换原则:
- string数据会转换number数据
- number会转换成true
- 0、’’、null、undefined会转换成false
- 慎用
==
,===
无类型转换
==运算符
null == undefined; //true100 == '100'; //true0 = ''; //true
字符串拼接
- 此处特殊,number会转化成string,其余string会转化成number
var a = 100 + 10; //110var b = 100 + '10'; //'10010'
if语句
- 此处特殊,为false的情况:0、’’、null、undefined、NaN、false
var a = trueif(a) { ...}var b = 100if(b) { ...}var c=''if(c) { ...}
逻辑运算与或非(&&、||、!)
console.log(10 && 0); //0console.log(''||'abc'); //'abc'console.log(!window.abc); //true// 判断1个变量会被当做true还是false的方法var a = 100;console.log(!!a); //true
3 题目解答
- JS中使用typeof能得到的哪些类型
typeof可以识别6种数据类型:number、string、boolean、object、function、undefined
- 何时使用
===
何时使用==
使用jQuery源码中推荐的写法,当obj.a为null或undefined时,看一个对象的属性是否存在或看一个函数的参数是否存在,但对象和形参必须定义,否则会报错,可简写使用==
,除此外一律用===
// 看一个对象的属性是否存在if(obj.a == null) { // 相当于obj.a === null || obj.a ===undefined,简写形式}// 看一个函数的参数是否存在function(a, b) { if(a == null) { ...}}
- JS中有哪些内置函数(数据封装类对象)
都是函数
- Number、String、Boolean、Object、Array、Function、Date、RegExp、Error(一定要大写)
内置对象
- Math、JSON
- JS变量按照存储方式区分为哪些类型,并描述其特点
值类型:数据分块存放在内存中,数据不会相互干涉
var a = 100;var b = a;a = 200;console.log(b); //100
引用类型:好几个变量共用1个内存块,节省内存空间,赋值只是变量指针的赋值,并不是真正值的拷贝,所以值的修改相互干预
var a = { age:20};var b = a;b.age = 21;conlose.log(a.age) //21
- 如何理解JSON如何理解JSON
- json只不过是一个JS对象而已
- json也是一种数据格式
- math也是JS对象
JSON.stringify({ a:10,b:20}) //将对象转换为字符串JSON.parse('{"a":10,"b":20}') //将字符串变为对象