[TOC]

一、基本数据类型

Number、String、Boolean、Undefined、Null、ES6新增:代表(Symbol)-一种实例是唯一且不可改变的数据类型。

1-1 Number类型

var a=10;
b=a;
b=20;
console.log(a)   //10(值)
  • 数值范围 ```javascript 最小值:Number.MIN_VALUE, JavaScript 中可表示的最小的数(接近 0,但不是负数),这个值为: 5e-324 最大值:Number.MAX_VALUE, JavaScript 中可表示的最大的数,这个值为: 1.7976931348623157e+308 无穷大:Infinity 无穷小:-Infinity


- 数值判断
```javascript
- NaN:not a number
      NaN 与任何值都不相等,包括他本身
- isNaN: is not a number

三、数据类型 - 图1

1-2 String类型

  • 字符串长度
    length属性用来获取字符串的长度

    var str = '前端程序猿 Hello World';
    console.log(str.length);
    
  • 字符串拼接字符串拼接使用 + 连接

    console.log(11 + 11);
    console.log('hello' + ' world');
    console.log('100' + '100');
    console.log('11' + 11); //拼接字符串
    console.log('11' - 3); //隐式转换
    console.log('11' * 3); //隐式转换
    console.log('male:' + true);
    
  1. 两边只要有一个是字符串,那么+就是字符串拼接功能
  2. 两边如果都是数字,那么就是算术功能。

    1-3 Boolean类型

  • Boolean字面量: true和false,区分大小写
  • 计算机内部存储:true为1,false为0

    1-4 Undefined和Null

  1. Undefined类型只有一个值,即undefined。undefined表示一个声明了没有赋值的变量,变量只声明的时候值默认是undefined
  2. Null类型也只有一个值,即null。null表示一个空,null值表示一个空对象指针。变量的值如果想为null,必须手动设置

两者相比较:

1. 相同点
  if 判断语句中,两者都会被转换为false

2. 不同点
  2.1 Number转换的值不同,Number(null)输出为0, Number(undefined)输出为NaN
    2.2 null表示一个值被定义了,但是这个值是空值
    2.3 undefined表示缺少值,即此处应该有值,但是还没有定义

3.注意点:
    alert(typeof undefined); //output "undefined"  
    alert(typeof null); //output "object"  

    第一行代码很容易理解,undefined的类型为Undefined;第二行代码却让人疑惑,为什么null的类型又是Object
  了呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即
  是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。

4.ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的
    alert(null == undefined); //output "true"

二、引用数据类型

  • Array,Object,Function 赋值既传递值也传递地址
    var obj1 = {age:19}
    var obj2 = obj1;
    obj2.name = "我有名字了";
    console.log(obj1.name); // 我有名字了
    
var arr=[1,2,3,4];
obj=arr;
obj.push(5);
console.log(arr);    //[1,2,3,4,5]

三、数据类型 - 图2

三、获取变量的类型

  • typeof
    var age = 18;
    console.log(typeof age);  // 'number'
    

四、数据类型转换

如何分辨数据类型:

  • 字符串的颜色是黑色的,数值类型是蓝色的,布尔类型也是蓝色的,undefined和null是灰色的

    4-1 转换成字符串

  • toString( )

    var num = 5;
    console.log(num.toString());
    
  • String( ) ```javascript String()函数存在的意义:有些值没有toString(),这个时候可以使用String()。比如:undefined和null

var num3=null; console.log(String(num3));


- **拼接字符串方式**
   - num  +  "",当 + 两边一个操作符是字符串类型,一个操作符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,返回字符串
<a name="kb6yx"></a>
### 4-2 转换为数值类型

- **Number( )**
```javascript
Number() 可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN
  • parseInt( )

    var num1 = parseInt("12.3abc");  // 返回12,如果第一个字符是数字会解析直到遇到非数字结束
    var num2 = parseInt("abc123");   // 返回NaN,如果第一个字符不是数字或者符号就返回NaN
    
  • parseFloat( )

    parseFloat()把字符串转换成浮点数
    parseFloat()和parseInt非常相似,不同之处在与
      parseFloat会解析第一个. 遇到第二个.或者非数字结束
      如果解析的内容里只有整数,解析成整数
    
  • +,-,0等运算

    var str = '500';
    console.log(+str);        // 取正
    console.log(-str);        // 取负
    console.log(str - 0);  //先转换成数值,再进行运算
    

    4-3 转换为布尔类型

  • Boolean( )

    0  ''(空字符串) null undefined NaN 会转换成false  其它都会转换成true
    

总结

  1. 基本类型的值在内存中占据固定大小的空间,因此被保存在栈内存中。引用类型的值占据两块内存空间。
  2. 引用类型的值是一个对象,它保存在堆内存中。
  3. 包含引用类型的值的变量不是实际对象本身,它是一个指针,指向实际对象。
  4. 在赋值运算中,复制的其实是指针,因此两个变量最终都会指向同一个对象。

    区别

    1.基本类型的值不可变 引用类型的值可变
    2.基本类型的比较是值得比较 引用类型的比较是引用的比较
    3.基本类型的变量是存放在栈内存中 引用类型的值是同时保存在栈内存和堆内存中的对象