数据类型
JavaScript中数据类型分为两大类
基本数据类型(值类型)和引用数据类型(对象类型)
基本类型:
- String :任意字符
- Number:任意数字
- boolean:true/false
- undefined:undefined
- null:null
对象(引用类型)
- Object:任意对象(用来存数据的对象)
- Function:一种特别对象(可以执行的对象)
- Array:一种特别对象(有数值下标,有序)
注意:Object包括Function和Array。
判断数据类型
- typeof:返回该数据的类型值的字符串表达,
- instanceof:翻译是实例的意思,判断是不是该构造函数的实例。主要用来判断对象的具体类型(Array还是Function)
- ===:全等于,用来判断等号两边的数据值和类型都一样。返回true/false
数据类型的分类和判断总结
- 基本(值)类型
- Number ----- 任意数值 -------- typeof
- String ----- 任意字符串 ------ typeof
- Boolean ---- true/false ----- typeof
- undefined — undefined ----- typeof/===
- null -------- null ---------- ===
- 对象(引用)类型
- Object ----- typeof/instanceof
- Array ------ instanceof
- Function ---- typeof
概念
实例:实例对象?
类型:类型对象?
举例说明:
function Person (name,age){//构造函数 类型对象
this.name = name
this.age = age
}
var p = new Person('tom',14)
Person('jack',12)
就比如上面的举例,上面的Person方法是一个对象,因为他是一个方法,var p也是一个对象,此时这个p就是实例对象,而这个Person方法是构造函数,p实例化了类型对象Person.而Person(‘jack’,12)就不是构造函数了。
1.undefined与null的区别?
undefined:定义未赋值,如var a—>为undefined
null:定义并且赋值了,只不过赋值为null
如:var a = null
2.什么时候给变量赋值为null?
(1)用来初始赋值,表明将要赋值为对象。
如:var a = null
console.log(typeof a)—>Object,但是null是基本数据类型,但是返回的为Object,为什么?因为它人为你写的为空是由于现在对象属性,不确定。所以先为空,等以后再赋值。
(2)结束前,让对象成为垃圾对象(被垃圾回收机制)
3.严格区别变量类型和数据类型?
我们知道数据类型分为基本数据类型和对象类型,但是这针对的是数据,但像var a = 1,和var c = function(){}中,a是基本类型,而c是引用类型。
数据,变量, 内存的理解
数据:我理解的是 数据用数据类型来标识,基本分为对象数据和基本数据。如var a = 3,这里的数据指数字3.
变量:变量都放在内存中的栈空间里。var a = 3,a被称为变量,a被称为基本类型变量,它存的是基本数据类型。var obj = {name:‘tom’},obj是引用变量,它指向的是内存中堆空间的一个对象,它只是指向,它实际存放的是堆空间中对象的地址。在这里我们说的变量其实都不是我们要操作的数据。但是它们指向数据,我们依靠它来操作数据。
内存:
内存,数据, 变量三者之间的关系
- 内存是容器, 用来存储数据的空间
- 变量是内存的标识, 通过变量我们可以操作(读/写)内存中的数据
实参与形参
var a = {name:"bob"}
function fn2 (obj) {
obj = {name:"tom"}
}
fn2(a)
console.log(a.name)//输出bob
上面的代码输出a对象的name的值,依然是bob,书上的话说,形参不能改变实参。根本原因是fn2(obj)这个方法,把a传进去时,它传递的是a变量的内容,a变量的内容是一个地址,这个地址指向的是{name:“bob”}对象。后来到方法里面又重新给它赋值了一个对象的地址,所以a的值依然没有改变。简单可以理解为fn2(obj=a)----》obj=a,fn2(obj).与a无关。
参数引用传递是值传递,传递的是变量a的值,即一个地址。这个地址指向的是{name:“bob”}对象。
举例:
var a = 3
function fn(a){
a = a +1
}
fn(a)
console.log(a)//3
上面的代码输出结果是3.
重点区分: a = 3 和 fn(a) 中的a不是一个变量。fn中的a可以是任何名字。
对象
什么是对象?
- 多个数据的封装体
- 用来保存多个数据容器
- 一个对象代表现实中的一个事务
为什么要用对象?
为了统一管理多个数据
对象的组成
- 属性:属性名(字符串)和属性值(任意类型)组成
- 方法:一种特殊的属性(属性值是函数)