image.png

================

类型

未定义 undefine

一般来说,永远不用显式地给某个变量设置 undefined 值,只是区分未定义和空指针null。

用于判断时,是一个假值false

特殊:

  1. let message; // 这个变量被声明了,只是值为 undefined
  2. // 确保没有声明过这个变量
  3. // let age
  4. console.log(typeof message); // "undefined"
  5. console.log(typeof age); // "undefined"
  1. let message; // 这个变量被声明了,只是值为 undefined
  2. // age 没有声明
  3. if (message) {
  4. // 这个块不会执行
  5. };
  6. if (!message) {
  7. // 这个块会执行
  8. };
  9. if (age) {
  10. // 这里会报错,要确定自己是要检测是否存在,还是是否假值
  11. };

空 null

1、在定义将来要保存对象值的变量时,建议使用 null 来初始化,不要使用其他值。
这样,只要检查这个变量的值是不是 null 就可以知道这个变量是否在后来被重新赋予了一个对象的引用

2、用于判断时,是一个假值false

数值 Number

整数int,浮点数float

  1. var a = 1;
  2. var b = 1.2;
  3. var c = 3e2; //3乘以10的2次方
  4. var d16 = 0x111 //16进制
  5. var d8 = 0o111 //8进制
  6. var d2 = 0b111 //2进制

基本方法:https://www.w3cschool.cn/jsref/jsref-obj-number.html
额外方法:https://www.yuque.com/yejielin/mypn47/mkkfc6#646b02d0

1、进制

image.pngimage.png打印出来的是十进制数

2、浮点

1、因为存储浮点值使用的内存空间是存储整数值的两倍,所以 ECMAScript 总是想方设法把值转换为整数。
2、不要用浮点进行计算,不精确。

  1. let floatNum1 = 1.; // 小数点后面没有数字,当成整数 1 处理
  2. let floatNum2 = 10.0; // 小数点后面是零,当成整数 10 处理
  3. let sum = 0.1 + 0.2 ;//0.30000004

3、科学计数

  1. let floatNum1 = 3.125e7; // 等于 31250000
  2. let floatNum2 =3e-17; //如 0.000 000 000 000 000 03,最高17位小数
  3. //默认情况下,ECMAScript 会将小数点后至少包含 6 个零的浮点值转换为科学记数法

4、范围

(1)
可以表示的最小数值保存在 Number.MIN_VALUE 中,这个值在多数浏览器中是 5e324;
可以表示的最大数值保存在Number.MAX_VALUE 中,这个值在多数浏览器中是 1.797 693 134 862 315 7e+308。

(2)
如果某个计算得到的数值结果超出了 JavaScript 可以表示的范围,那么这个数值会被自动转换为一个特殊的 Infinity(无穷)值。
任何无法表示的负数以-Infinity(负无穷大,Number.POSITIVE_INFINITY)表示,
任何无法表示的正数以 Infinity(正无穷大Number.NEGATIVE_INFINITY)表示。

要确定一个值是不是有限大(即介于 JavaScript 能表示的
最小值和最大值之间),可以使用 isFinite()函数

  1. let result = Number.MAX_VALUE + Number.MAX_VALUE;
  2. console.log(isFinite(result)); // false

5、NaN

not a num

  1. console.log(0/0); // NaN
  2. console.log(-0/+0); // NaN
  3. console.log(5/0); // Infinity
  4. console.log(5/-0); // -Infinity
  5. console.log(NaN/10); // NaN
  6. console.log(NaN == NaN); // false
  7. console.log(isNaN(NaN)); // true
  8. console.log(isNaN(10)); // false,10 是数值
  9. console.log(isNaN("10")); // false,可以转换为数值 10
  10. console.log(isNaN("blue")); // true,不可以转换为数值
  11. console.log(isNaN(true)); // false,可以转换为数值 1
  12. //此时,首先会调用对象的 valueOf()方法,
  13. //然后再确定返回的值是否可以转换为数值。
  14. //如果不能,再调用 toString()方法,并测试其返回值。

6、ES12 大数值逗号

一般数字会通过100,000这样,每个3位给一个逗号隔开,方便直观看到多大的数值

但是JS不支持,ES12提供了另一种方式,如下,用_下划线隔开
image.png
image.png

字符串 String

尽量用双引号,因为很多语言只支持双引号(如java)

  1. var c = "张三" ;
  2. var d = '李四' ;
  3. var e = "你好,我是'呵呵'";
  4. var f = "你好,我是\"呵呵\" " ; //转义字符

字符串相当于是一个字符数组,可以用c[1]的形式返回字符串中的值,例子就是’三’,c.length 为2。

不要用new String创建 String 对象。它会拖慢执行速度,并可能产生其他副作用:

字符串的一些方法https://www.w3cschool.cn/javascript/js-strings.html

常用方法

分割/提取

a.split(“分隔符”),返回分割后的数组
image.png
image.png

ES8 填充

padStart是从头开始填充,padEnd是从最后开始填充
第一个参数是填充到多少位
不加第二个参数默认是填充空格
image.png
image.png

ES10 去除空格

image.pngimage.png

ES6 模板字符串(重要)

image.png

3、拼接
原本的拼接
image.png

优化后的拼接
image.png
image.png(里面还可以放表达式)
image.png(里面还可以放函数)

image.png

标签模板函数

image.png
可以通过 函数名模板字符串 的方式调用函数
image.png

第一个参数是,字符串被空格、${}分割后,的字符,然后组成数组。
image.png

第二个参数是,第1个${}里面的结果

第三个参数是,第2个${}里面的结果

如此类推

我们这样用的情况比较少,但是一些第三方库如react的库,会用到
image.png image.png(div是这个库的一个函数)
image.png(div是这个库的一个函数)

布尔 Boolean

  1. var aa = true; //内部储存是1
  2. var ab = false; //内部储存是0

image.png

对象 Object

由大括号组成,里面的构造是 键 : 值 组成

  1. var Obj = {};
  2. var Obj1 = {name:"yjl",age:30};

https://www.yuque.com/yejielin/mypn47/mkkfc6

符号 Symbol (ES6)

image.png
image.png

创建

1、普通创建

  1. let s1 = Symbol();
  2. let s2 = Symbol();
  3. console.log(s1 == s2); // false
  4. // ES10,可以传入一个描述
  5. let s3 = Symbol('foo');
  6. let s4 = Symbol('foo');
  7. console.log(s3 == s4); // false
  8. // 查看描述
  9. s3.description; // foo

2、使用全局符号创建
相同的描述,可以有相同的值
image.pngtrue

2个创建方式的区别
区别就是会根据for后面的内容创建,如果内容一样,指向就是一样的。

  1. let localSymbol = Symbol('foo');
  2. let globalSymbol = Symbol.for('foo');
  3. console.log(localSymbol === globalSymbol); // false

image.png

使用场景

安全高效给对象添加属性和方法,避免覆盖掉原理对象的属性和方法
image.png
image.png给obj添加属性

image.png调用属性

调用

  1. let c = Symbol();
  2. let num = reactive({
  3. a:1,
  4. b:2,
  5. [c]:function(){
  6. console.log('ccccc');
  7. }
  8. });
  9. function add() {
  10. num.a += 1;
  11. console.log(num);
  12. num[c](); //调用
  13. };

获取

image.png image.png

image.png获取Symbol.for() 创建的描述

ES11 大整型 BigInt

image.png image.png
image.png 并不是整数

使用场景

image.png image.png 最大安全整数
image.png image.png 传统的最大安全整数,不能再增加了
image.png image.png

=================

变量储存

基本数据类型:Number、String、Boolean、Null、Undefine,储存在栈空间
引用数据类型:Object ,储存在堆空间(包括数组)

image.png

=================

查看类型 typeof

image.png
JavaScript 中有五种可包含值的数据类型:
字符串(string)
数字(number)
布尔(boolean)
对象(object)
函数(function)

有三种对象类型:
对象(Object)
日期(Date)
数组(Array)

同时有两种不能包含值的数据类型:
null
undefined

特殊:

  1. console.log(typeof null); //Object
  2. console.log(typeof undefined); //undefined
  3. console.log(null == undefined); // true

=================

类型转换

其他转数字

任何转数值 Number( )

image.png

字符串转数值 parseInt( )(优先) / parseFloat( )

image.png
因为不传底数参数相当于让 parseInt()自己决定如何解析,所以为避免解析出错,建议始终传给它第二个参数
image.png

image.png

其他转字符串

image.png
默认情况下,toString()返回数值的十进制字符串表示。而通过传入参数,可以得到数值的二进制、八进制、十六进制,或者其他任何有效基数的字符串表示
image.png
image.png
image.png

image.png

其他转布尔

  1. typeof xx,可以查看xx的数据类型
  2. .constructor 可以返回构造函数
  3. + 可以把变量转换成数字,如x = + y;
  4. //数值 转 字符串
  5. var a = 5
  6. console.log(typeof a.toString());
  7. console.log(typeof String(a));
  8. console.log(typeof (a+""));
  9. //其他转数值
  10. var b = "4";
  11. console.log(typeof Number(b));
  12. console.log(typeof Number(a)); //输出为NaN,not a number
  13. console.log(typeof Number(undefined)); //输出为NaN,not a number
  14. console.log(typeof Number(null));//输出为0
  15. var c = "4a"
  16. console.log(typeof parseInt(b),parseInt(c,10),parseInt(null)); //输出为4 4 NaN
  17. //其他转布尔
  18. console.log(typeof Boolean("0")); //true,只要有内容就是true,除了数值0
  19. console.log(typeof Boolean("")); //false
  20. console.log(typeof Boolean(0)); //false
  21. console.log(typeof Boolean(null)); //false
  22. console.log(typeof Boolean(undefined)); //false

请注意:

NaN 的数据类型是 number
数组(Array)的数据类型是 object
日期(Date)的数据类型为 object
null 的数据类型是 object
如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 Object。

data方法:https://www.w3cschool.cn/jsref/jsref-obj-date.html

num方法:https://www.w3cschool.cn/jsref/jsref-obj-number.html