js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object)。数组
因为js
中的变量是松散类型的,因此它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.数据结构
typeof 123 //Number函数
typeof 'abc' //String学习
typeof true //Boolean指针
typeof undefined //Undefinedcode
typeof null //Object对象
typeof { } //Object内存
typeof [ ] //Object字符串
typeof console.log() //Functionio
null类型进行typeof操做符后,结果是object,缘由在于,null类型被当作一个空对象引用。
Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。
NaN:非数字类型。特色:① 涉及到的 任何关于NaN的操做,都会返回NaN ② NaN不等于自身。
isNaN() 函数用于检查其参数是不是非数字值。
isNaN(123) //false isNaN("hello") //true
字符串有length属性。
字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,defined没有toString()方法)。
该类型只有两个值,true和false
只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。
null类型被看作空对象指针,前文说到null类型也是空的对象引用。
js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一块儿。引用类型有时候也被称为对象定义,由于它们描述的是一类对象所具备的属性和方法。
咱们看到的大多数类型值都是Object类型的实例,建立Object实例的方式有两种。
第一种是使用new操做符后跟Object构造函数,以下所示
var person = new Object();
person.name = "Micheal";
person.age = 24;
第二种方式是使用对象字面量表示法,以下所示
var person = {
name : "Micheal",
age : 24
};
数组的每一项能够用来保存任何类型的数据,也就是说,能够用数组的第一个位置来保存字符串,第二个位置保存数值,第三个位置保存对象....另外,数组的大小是能够动态调整的。
建立数组的基本方式有两种
第一种是使用Array构造函数,以下所示
var colors = new Array("red","blue","yellow");
第二种是使用数组字面量表示法,以下所示
var colors = ["red","blue","yellow"];
每一个函数都是Function类型的实例,并且都与其余引用类型同样具备属性和方法。函数一般是使用函数声明语法定义的,以下所示
function sum(num1,num2){
return num1 + num2;
};
这和使用函数表达式定义函数的方式相差无几。
var sun = function (){
return sum1 + sum2;
};
也就是说,js按照存储方式分为值类型和引用类型。那么他们的计算有什么区别呢?
题目1: var a = 100;
var b = a;
a = 200;
console.log (b);
题目2: var a = {age : 20};
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是引用类型,当从一个变量向另外一个变量赋值引用类型的值时,一样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中。
这时保存在变量中的是对象在堆内存中的地址,因此,与简单赋值不一样,这个值的副本其实是一个指针,而这个指针指向存储在堆内存的一个对象。那么赋值操做后,
两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象。所以,改变其中任何一个变量,都会相互影响。
所以,引用类型的赋值实际上是对象保存在栈区地址指针的赋值,所以两个变量指向同一个对象,任何的操做都会相互影响。
本人正在学习和摸索中,若有错误,欢迎指正!