JS——数据类型
js有六种数据类型,分别是五种基本数据类型(number、boolen、string、undefined、null)和一种复杂类型(object);
类型查看方式:typeof 操作符 typeof(xx);
注:对null类型数据进行typeof后,返回的是object类型,因为null被当做了一个空对象引用;
1、Number类型
number类型包含整数和浮点数两种值(浮点数需以x.x形式展现)、极大或极小的数字可以用科学(指数)计数法来写(例: var a = 123e5;)。
NaN:非数字类型。特点:①涉及到的任何关于NaN的操作都会返回NaN;②NaN不等于自身。
NaN:即非数值(Not a Number)是一个特殊的值,这个数值表示本来要返回数值的操作未返回数值的情况(这样就不会抛出错误了);
isNaN()函数用于检查其参数是否是非数字值,在收到一个值时,它会首先尝试将这个值转换成数值。
isNaN(123); //false
isNaN("hello") //true
isNaN("123") //false "123"是一个字符串,但可以转换成数值
2、Boolen类型
该类型只有true和false两个值。
3、string类型
字符串有length属性。
字符串转换:转型函数String(),适用于任何数据类型(null,undefined转换后为null和undefined);
toString()方法(注:null和undefined没有toString()方法)。
4、Undefined类型
只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量值就是undefined。
5、Null类型
null类型被看做空对象指针,前文说道null类型也是空的对象引用。
6、Object类型
js中对象是一组属性与方法的集合。这里就要说道引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为他们描述的是一类对象所具有的属性和方法。
三大引用类型
1、Object类型
我们所看到的大多数类型值都是Object类型的实例。创建Object实例的方式有两种。
第一种:使用new操作符跟Object构造函数,如下:
var person = new Object();
person.name = "Elaine";
person.age = 20;
第二种:使用对象字面量表示法(json),如下:
var person = {
name:"Elaine";
age:24;
};
2、Array类型
数组的每一项可以用来保存任何类型的数据,也就是说,可以用数组的第一个位置来保存字符串,第二个位置保存数值,第三个位置保存对象...另外,数组的大小是可以动态调整的。
创建数组的基本方式:
第一组:使用Array构造函数,例如 :
var colors = new Array("red","blue","yellow");
第二组:使用数组字面量表示法,例如:
var colors = ["red","blue","yellow"];
3、Function类型
每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。函数通常是使用函数声明语法定义的,例如:
function sum(a,b){
return a+b;
};
这和使用函数表达式定义函数的方式相差无几:
var sum = function(){
return a+b;
};
js按照存储方式分为值类型和引用类型,它们在计算上有何区别?
举例说明:
题目1: var a = 100;var b = a;
a = 200;
console.log (b);
var b = a;
b.age = 21;
console.log (a.age);
题目1的答案是 100,题目2的答案是21;
题目1是简单的值类型,在从一个变量向另一个变量赋值基本类型时,会在该变量上创建一个新值,然后再把该值复制到为新变量分配的位置上。此时,a中保存的值为 100 ,当使用 a 来初始化 b 时,b 中保存的值也为100,但b中的100与a中的是完全独立的,该值只是a中的值的一个副本,此后,这两个变量可以参加任何操作而相互不受影响。也就是说基本类型在赋值操作后,两个变量是相互不受影响的。即操作对象是值。
题目2是引用类型,当从一个变量向另一个变量赋值引用类型的值时,同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中。这时保存在变量中的是对象在堆内存中的地址,所以,与简单赋值不同,这个值的副本实际上是一个指针,而这个指针指向存储在堆内存的一个对象。那么赋值操作后,两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象。因此,改变其中任何一个变量,都会相互影响。因此,引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响。即操作对象是指向值的指针。