JavaScript 数据类型

本文详细探讨了JavaScript中的基本数据类型(String, Number, Boolean, Null, Undefined, Symbol, bigint)与引用数据类型(Object, Array, Function)的区别,包括存储位置、属性操作、值复制和参数传递。重点讲解了字符串、数值、布尔值等实例以及动态属性和对象复制的特性。
摘要由CSDN通过智能技术生成

JavaScript 数据类型

基本数据类型
字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbolbigint
引用数据类型
对象(Object)、数组(Array)、函数(Function)。

基本类型也称为简单类型,由于其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈中,即按值访问。

引用类型也称为复杂类型,由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此,其值存储在堆(heap)中,而存储在变量处的值,是一个指针,指向存储对象的内存处,即按址访问。引用类型除 Object 外,还包括 Function 、Array、RegExp、Date 等等。

基本数据类型和引用类型的区别

基本类型的变量是存放在栈区的(栈区指内存里的栈内存);
引用类型的值是同时保存在栈内存和堆内存中的对象;
基本类型的比较是值的比较;
引用类型的比较是引用的比较

两种类型在添加属性时候的区别

1、引用类型可以动态的给添加属性,
2、但是基本类型的值是不可变也不可以复制的

两种类型在复制值的什么有什么区别

基本类型复制值的时候,会重新在变量对象上创建一个新值,然后把值赋值到新变量分配的空间上来(理解为栈中的空间);

引用类型复制时,也会在储存在变量对象中的值复制一份放到为新变量分配的空间上来,但是不同的是新复制的值是一个指针,指向原值所在堆内存中的地址;
在这里插入图片描述

两种类型在传递值的时候有什么区别

结论 没有差别

JavaScript 拥有动态类型

在这里插入图片描述

字符串(String)
console.log('----字符串----');
var a = 'Holle';
console.log(a);
console.log(typeof(a));
数值(Number)
console.log('----数字----');
var a = 1;
console.log(a);
console.log(typeof(a));
布尔(Boolean)
console.log('----布尔----');
var a = true;
console.log(a);
console.log(typeof(a));
空(null)
console.log('----空----');
var a = null;
console.log(a);
console.log(typeof(a));
未定义(undefined)
console.log('----未定义----');
var a;
console.log(a);
console.log(typeof(a));
引用类型按
  1. 动态属性
    var person = new Object();
    person.name = “Nicholas”;
    console.log(person.name); //“Nicholas”
    delete person.name
    console.log(person.name);//undefined

  2. 赋值变量

obj1赋值新对象时,只是向obj1中存如指向object的引用地址,向obj2赋值obj1时,仅仅是将obj1中储存的引用地址复制给obj2,所以对象改变时,obj1和obj2会同时响应。

var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
console.log(obj2.name);  //"Nicholas"

在这里插入图片描述

  1. 参数传递

参数传递只有值传递,不存在引用传递。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样

function fn(obj){
     obj.name = 'new'
     return obj
 }
var obj = new Object();
var newObj = fn(obj)
console.log(obj)//{name:new}
console.log(newObj)//{name:new}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值