js基础-数据类型

原始类型:
number、boolean、null、undefined、string、symbol
存放在栈中,占内存小,读取快

引用类型:
object 可以动态分配内存、可以存大数据
原始数据的值存放在栈中
原始类型保存值在栈中,而引用类型保存的是指针。
例1:

var  a=1;
var b=false;
var c={
	name:‘xp’,
	hobies: ['running','listen music']
}

栈:

a1
bfalse
c指针1

堆:

指针1{name:‘xp’,hobies:指针2}
指针2[‘running’,‘listen music’]

如上图,变量c在栈中保存指针1,hobies又是一个引用类型,所以在堆中又创建一个指针2的内存用来存放。

例2:
增加操作:

var d=c;
d.hobies = [1,2,3]//c和d的都被修改
c指针1
d指针1

例3:

function test(person){
	person.age=20;
	person={
		age:30
	}
	return person
}
var p1={age:10};//20
var p2=test(p1);//30

执行test函数,把p1的指针赋给了person,然后修改age,两个都被修改。重新给person赋值,给了新的指针,和p1没有关系。

undefined
undefined表示已定义未赋值,not defined表示未定义。

null
null是原始数据类型,但是typeof null是object,是一个源远流长的bug。

赋值的方式:
字面量、String()、new String()

var a='as';
var b=String(a);
var c=new String(a);
a.length = 0;//转为String对象,对象的length被赋值,之后对象被销毁
console.log(a.length);//2
a.split('')//['a','s']同理返回的是string对象操作的返回结果,a不受影响
a//'as'

前两种返回的是基本类型,new出来的是对象。
当基本类型调用方法时,都会由构造函数转为对应的对象去执行,执行完成后对象被销毁。这个对象就是包装对象,number、string、boolean都有对应的包装对象,null和undefined没有,所以他们不具有可以执行的方法。
例4:
2.length 会报错,为何?
数字后面的小数点会被认为是小数。
2…length 或 2.0.length 或 (2).length 或 2 .length

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值