JavaScript的数据类型

JavaScript的数据类型


JavaScript的数据类型

JavaScript的基本数据类型有7种,numberstringbooleanundefinednull以及ES6中添加的 symbolbigint

JavaScript的引用数据类型有一种,object

1. number

1.1 整数类型

常见的为十进制,0开头可以设置为8进制,0x开头可以设置为16进制。

let intNum = 55 // 10进制55
let num1 = 070 // 8进制56
let hexNum1 = 0xA //16进制10
1.2 浮点类型

数值汇总的时候必须包含小数点,可以用科学计数法表示。

let floatNum1 = 1.1;
let floatNum2 = 0.1;
let floatNum3 = .1; //有效,但不推荐
let floatNum = 3.125e7;//科学计数法

有一个特殊的数值类型 NAN,意为“不是数值”,用来表示本来要返回数值的操作失败了,而不是抛出错误。

console.log(0/0); // NaN
console.log(-0/+0); // NaN
console.log('aniu' - 100); // NaN  非数字 Not a Number
  // isNaN()这个方法用来判断非数字 并且返回一个值如果是数字返回的是 false,如果不是数字返回的是 true 

2. undefined

undefined类型只有一个值,就是特殊值undefined。当用var或者let声明变量但是没有初始化,这个变量的值就是undefined
包含undefined值的变量和没有定义的变量是不一样的,后者会报错。

3. string

字符串是不可变的。

let lang = "Java";
lang = lang + "Script"; // 先销毁再创建
var str = 'abc' ;
str = 'hello';
//当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
//重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
//由于字符串的不可变,在大量拼接字符串的时候会有效率问题;
var str= ‘’;
for(var i=0;i<100000;i++){
str += i;
}
console.log(str); //这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间

4. null

null类型只有一个值,就是null。
null值表示一个空指针对象,所以给typeof传null会返回一个"object"。
undefined是由null值派生而来的。

console.log(null == undefined); // true

常用于变量需要保存一个暂时没有定义的对象时,用来填充变量。

5. boolean

布尔值只有两个,true 和 false。

6.symbol 和 bigint

占位以后写

7.object

主要包含objectarrayfunction
还包括Date,RegExp,Map,Set等。

8.区别

基本数据类型都保存在栈中,引用类型的对象保存在堆中,在栈中会保存堆内的引用地址。
把一个变量赋值给另一个变量时,解析器首先要确认这个值是几本类型还是引用类型。

let a = 10;//栈内存中只有a
let b = a;//赋值操作,b = 10,占内存中添加b并把a复制一份给b
b = 20;//栈内存中的b保存了另一个值
console.log(a);//10

将一个object赋值给另一个object的时候,只是将栈中保存的引用地址给了新的object,这个时候两个object共用相同的引用地址,修改任意object都会造成两个object的变化。

var obj1 = {};//栈内存中obj1保存了一个指向堆内存的指针
var obj2 = obj1;//栈内存中添加obj2,同时将栈中obj1保存的指针复制给obj2
obj2.name = "Xxx";//修改的是堆内存中的对象属性
console.log(obj1.name);//Xxx,栈中obj1保存的指针指向的堆内存中的对象属性已经被修改了

9.总结

声明变量时,内存地址分配不同:

  • 简单类型的值存放在栈内存中,栈内存中存放的是相应的值。
  • 引用类型对应的值存放在堆内存中,在栈中存放的是指向堆内存的地址。

赋值变量时:

  • 简单类型赋值,是生成相同的值,两个对象对应不同的地址。
  • 复杂类型赋值,是将保存对象的内存地址赋给另一个变量。也就两个变量指向堆内存中同一个对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值