Javascript语言精粹学习笔记之数据类型
作者:互联网
- Javascript 的简单数据类型包括
1. 数字 number
JS不分整型与浮点型
两个浮点数相加,精度不够
2. 字符串 String
除"+" 符号拼接字符串外es6字符串拼接方法:`${str}${str2}`
3. 布尔值 boolean
4. null
null 专门用来表示一个空的对象
5. Undefined
当声明一个变量,但是并不给变量赋值或者赋值为undefined时,它的值就是undefined,因为JS是一门弱类型语言,不赋值的情况下JS无法判断他需要的内存,但为了能正常执行就为Undefined.使用typeof检查一个undefined时也会返回undefined。
以上都是简单数据类型,其他都是对象:Function,Array等。
- 研究一下,前五个貌似是对象,因为他们拥有方法,但是他们是不可变的?
var s1 = 2.1;
var s2 = s1.toFixed(2);
ps:参考资料:《JavaScript权威指南(第六版)》、《JavaScript高级程序设计(第三版)》
根据在csdn和翻阅资料终于找到的解释:上面第一行s1为number基本类型,但在第二行中s1调用了一个toFixed()方法 ,当第二行代码访问 s1 时,访问过程处于一种读取模式,也就是要 从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理
(1) 创建 Number 类型的一个实例;// var s1 = new Number(2.1);
(2) 在实例上调用指定的方法;
(3) 销毁这个实例;
在ECMAScript中,提供了 3 个特殊的引用类型:Boolean、Number 和String。他们除了拥有基本类型的特点外,还拥有引用类型的特点。每当读取一个基本类型,后台就会创建一个对应的基本类型包装的对象,从而可以调用一些特殊的方法,但并不能定义或者添加函数。
为什么他们是不可变的?
var num1 = 1;
num1 =2;
console.log(num1);//2
如上图所示,貌似第二行num1 =2修改了第一行对于num1的值,但实际上并没有。首先我们要明白值表示什么,不能改变的值为字面量,在示例中num1变量的值改变了,但字面量1并没有改变,改变的是num1的指向,可以理解为类似于指针,在第一行中num1指向了字面量为1,第二行改变了指向,指向了字面量为2。
下面这个例子,如果类似指针,那么有人会疑惑为什么b!=2。
这就要用到“小黄书”(你不知道的JavaScript(上卷))中的引擎的查找方式,在第二行中将a赋予给b,先是用了b的LHS查询找到变量b,然后在用a的RHS查询,然后用a查询到的结果1赋于变量b。所以结果类似为b=1;
var a = 1;
var b =a;
a = 2;
console.log(b); //1
再说一下,对象为什么是可变的
首先明白对象是由名值对组成的一个无序集合,属性名是字符串,所以把对象看成从字符串到值的映射。我们通过引用而非值来操作对象。如下图,x为一个对象的引用,将x赋于y,那么y也是一个对象的引用,而且和x引用同一个对象,通过变量y来修改这个对象,同时变量x也会发生改变。
var x = {};
y = x;
y.a = 2;
console.log(x.a);//2
标签:精粹,num1,对象,s1,Javascript,数据类型,字符串,第二行,var 来源: https://blog.csdn.net/weixin_59695963/article/details/118465939