2、javaScript中的数据类型
在javaScript中,变量可以存储原始值和引用值
(1)原始值就是存储在栈中的简单数据,其类型和数值一一对应,通过变量名就可以直接访问到数据。
(2)引用值是存储在堆中的对象数据,通过变量名先去栈中找对象地址,根据对象地址到堆中找对象数据,顺序是:变量名(栈)->对象地址(栈)->对象数据(堆)
2.1、原始类型
1、5中原始类型:Undefined,Null,Boolean,Number,String
2、其中Undefined和Null是两个类型只对应一个数值的类型:Undefined类型只对应一个值undefined;Null类型也只对应一个值null
3、Boolean类型对应的是两个值:true和false
4、Number和String类型是对应无数个值的;比如Number类型对应值有1;2;3.....无数个数值;String类型也是对应无数个字符串:'jame'、'lindar'、“my name is taopopy”等等无数个值
2.1.1 Undefined类型
1、Undefined类型只有一个值undefined,意思就是类型未知,数值未知,这种类型通常出现在下面三种情况中
(1)只声明而未赋值的变量,其类型和数值都是未知的
var unKnown //仅声明未定义
console.log(typeof unKnown) //打印结果是undefined
(2)从未声明和赋值的变量(可以理解为无中生有的变量)
console.log(typeof unKnown2) //打印结果是undefined
(3)执行一个没有返回值的函数
function(){
console.log('none return')}
var v1=function();//打印出none return
console.log(typeof v1)//打印出undefined
2.1.2 Null类型
1、Null类型只有一个值null,之前在说引用值的时候提到的顺序:变量名(栈)->对象地址(栈)->对象数据(堆),现在如 果在堆中这个对象数据不存在,即对象为空,那么在栈中的对象地址是不是就不存在,为了来表示这个无用的对象地址,就 用null值来表示。但是如果用typeof来打印数据类型却是object,从类型的角度来说应该是Null,但是从null表示空对象的角 度来讲打印出object也是对的,所以ECMAScript也是从null表示空对象这个角度去定义的,即打印出来是object
var obj=null;
console.log(typeof obj);//打印出来是object
2.1.3 Boolean类型
1、Boolean类型中只有两个值true和false
2.1.4 Number类型
1、javaScript中的number类型可以描述整数值和浮点值
var number1=100; //整数值
var number2=5.185 //浮点值
2、数值前面添加前缀0描述为八进制,0x描述为十六进制
var number1=011 //八进制,对应十进制的9
var number2=0x11 //十六进制,对应十进制的17
3、科学计数法,用e来描述10的e次方
var number1=1.01e3; //对应1010
var number2=11111e-3; //对应11.111
4、特殊的数值
(1)Number.MAX_VALUE(1.7976931348623157e+308):表示Number类型能表达的最大值
(2)Number.MIN_VALUE(5e-324):表示Number类型能表达的最小值
(3)Number.POSITIVE_INFINITY(Infinity):表示正无穷,值为Infinity
(4)Number.NEGATIVE_INFINITY(-Infinfiy):表示负无穷,值为-Infinfiy
(5)NaN:表示不是一个数字,在字符串转化为数字失败的时候返回
var num=Number("t");
console.log(num);//打印出来就是NaN
值得注意的是:NaN既不能计算也不能比较,自己和自己也不相等,判断一个变量的值是否为NaN就用isNaN(变量名)
console.log(isNaN(num)) //如果num为NaN就为true,否则为false
2.1.5 String类型
1、String类型是javaScript中唯一没有固定大小的原始类型,与其他语言不一样的是,它既能用单引号来包括,也能用双引号来包括,如果字符串中嵌套字符串,则需要单双引号交替使用
var love="you are my 'boyfriend'" //打印出来就是you are my 'boyfriend' (是不是很邪恶)
2.转义字符大家用到的时候直接上网查 javaScript转义字符
2.2引用类型
1、对于引用类型数据,实际上指的是对象,什么是对象(请之前有面向对象的童鞋自动忽略下面对对象的讲解):对象,复杂的说它是一组功能行为互补的数据集合,简单的说就是由原始数据和函数构成的集合,例如人就是一种对象,而某个具体的人是一个对象(注意前面说人是用一种,这里说某人就是一个),对象人的属性有语言(String类型),国家(String类型),身高(Number类型),对象实例某个人小明在人的属性里就有对应具体的值,语言(String类型)->中文(String类型的值),国家(String类型)->中国(String类型的值),身高(Number类型)->175(Number类型的值)。
2,、创建对象的方式有两种,Object构造方法和字面值的方式
(1)Object构造方法:先创建一个对象,然后为对象添加一些属性
var xiaoming=new Object();
xiaoming.name='xiaoming'; //像不像废话
xianming.country='china';
xiaoming.languaage='chinese';
xiaoming.height=175;
当然还能加一些函数
xiaoming.skill=function(){
'我会写代码')
}
(2)字面值的方式(这种方式能更好的看出对象结构,也很像数组)
var xiaoming={
name:'xiaoming',
country:'china',
language:'chinese',
height:175,
skill:function(){
console.log('我会写代码')
}
}
3、获取对象属性也有两个方法,点语法取值和键名字符串取值
(1)点语法取值的格式就是:对象.属性
console.log(xiaoming.name); //打印结果是xiaoming
console.log(xiaoming.language); //打印结果是chinese
xiaoming.skill(); //函数结果是打印‘我会写代码’
(2)键名字符串取值的格式就是:对象['属性']
console.log(xiaoming['name']);//打印结果是xiaoming
console.log(xiaoming['language']);//打印结果是chinese
xiaoming['skill']();//函数结果是打印‘我会写代码’
值得注意的是传入的键必须是字符串类型的,像下面的这种就不行
console.log(xiaoming[name]); //错误