JS 中的基本数据类型
六种基本数据类型, 包括 Number,String,Boolean,Undefined,Null. 还有一种复杂数据类型 (object);
typeof 操作符
JS 中提供一种检测当前变量数据类型的方法 (typeof);
- typeof 123 //Number
- typeof "shenqixiaomin" //String
- typeof true //Boolean
- typeof undefined //Undefined
- typeof null //object
- typeof {
- } //object
- typeof [] //object
- typeof console.log() //Function
null 类型其实是一种空对象.
1.Number 类型
Number 类型包含整数和浮点数两种值.
NaN: 非数字类型. 特点: 1, 涉及到的任何关于 NaN 的操作, 都会返回 NaN 2,NaN 不等于自身.
isNaN(): 检测参数是否是非数字类型.
- isNaN(123) //false
- isNaN("shenqixiaomin") //true
2.String 类型
字符串转换:
String(): 适用于任何数据类型;
toString():null,undefined 不能用, 其他都能用.
3.Boolean 类型
这个类型只有两个值: true 和 false. 下表是各种数据类型转成 boolean 类型的规则:
数据类型 | 转换成 true | 转换成 false |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非 0 数值(包括无穷大) | 0 和 NaN |
Object | 任何非空对象 | null |
Undefined | 不适用 | undefined |
4.undefined 类型
只有一个值, 即 undefined 值. 使用 var 声明了变量, 但未给变量初始化值, 那么这个变量的值就是 undefined.
5.Null 类型
null 类型被看做空对象指针
6.Object 类型
JS 中对象是一组属性与方法的集合. 这里就要说到引用类型了, 引用类型是一种数据结构, 用于将数据和功能组织在一起. 引用类型有时候也被称为对象定义, 因为它们描述的是一类对象所具有的属性和方法.
三大引用类型
1.Object 类型
Object 的实例有两种创建方式:
1. 使用 new 操作符后 Object 构造函数:
- var person=new Object();
- person.name="shenqixiaomin";
- person.age=26;
2. 字面量表示:
- var person={
- name:"shenqixiaomin",
- age:26
- }
2.Array 类型
也有两种创建方式
1. 构造函数
var colors=new Array("red","yellow","blue");
2. 字面量
var colors=["red","yellow","blue"];
3.Function 类型
- function sum(num1,num2){
- return num1+num2
- }
JS 按照存储方式分为值类型和引用类型. 那它们有什么区别呢
看下面代码
- var a=100;
- var b=a;
- a=200;
- console.log(b); //100
简单的值类型, 在从一个变量向另一个变量赋值基本类型时, 会在该变量上创建一个新值, 然后再把该值复制到为新变量分配的位置上.
此时, a 中保存的值为 100 , 当使用 a 来初始化 b 时, b 中保存的值也为 100, 但 b 中的 100 与 a 中的是完全独立的, 该值只是 a 中的值的一个副本, 此后,
这两个变量可以参加任何操作而相互不受影响. 也就是说基本类型在赋值操作后, 两个变量是相互不受影响的.
- var person={
- name:"shenqixiaomin"
- }
- var someBody=person;
- person.name="who";
- console.log(someBody.name); //who
引用类型, 当从一个变量向另一个变量赋值引用类型的值时, 同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中.
这时保存在变量中的是对象在堆内存中的地址, 所以, 与简单赋值不同, 这个值的副本实际上是一个指针, 而这个指针指向存储在堆内存的一个对象. 那么赋值操作后,
两个变量都保存了同一个对象地址, 则这两个变量指向了同一个对象. 因此, 改变其中任何一个变量, 都会相互影响.
因此, 引用类型的赋值其实是对象保存在栈区地址指针的赋值, 因此两个变量指向同一个对象, 任何的操作都会相互影响.
来源: http://www.jianshu.com/p/6fc798019ead