3.1变量和常量

变量实质上是一个具名的值,变量的值是可变的。
let关键字是ES6新出的。在ES6之前,var是唯一用来定义变量的关键字。
变量的声明和赋值
let currentTempC= 22;
仅声明变量
let targetTempC;
声明变量的时候可以不指定初始值,默认初始值:undefined
同时声明多个变量
let targetTempC,room1=”roomA”,room2=”roomB”;
常量(ES6新特性):常量一旦初始化就不能在改变。
const ROOM_TEMP_C=21.55;
常量名通常由大写字母组成,并用下划线间隔多个单词.

3.2 变量和常量:用那个

优先使用常量,一旦找到修改常量的正当理由,在改成变量也不迟

3.3 标识符命令(变量的命名规范)

变量名,常量名,函数名这些名字统称作标识符,他们有一些命名规范
必须以字母$,下划线开头
必须是由字母,数字,$下划线组成
可以使用Unicode字符 例如 π
不可用使用保留字
驼峰命名法(单子首字母大写,看起来像驼峰)
currentTempC
下划线命名法
current_temp_c

3.4字面量

字面量就是数据值,是一种直接定义创建值的方式
let room1 = “roomA”;
room1是变量名 “roomA”是一个字面量

3.5 基本类型和对象

6种基本类型:
数字,字符串,布尔,null,undefined,符号
除了6种基本类型,剩下的都是对象。
内置对象和自定义对象,内置对象有,Array,Date,RegExp,Map,Set

3.6数字

  1. let count = 10;//即便赋的值是integer;但 count仍然是double类型
  2. const blue = 0x0000ff;//十六进制数(十六进制ff等于十进制255)
  3. const umask = 0o0022;//八进制(八进制22等于十进制18)
  4. const roomTemp = 21.5;//十进制
  5. const c = 3.0e6;//指数(3.0 × 10~6 = 3,000,000)
  6. const inf = Infinity;//正无穷
  7. const ninf = -Infinity;//负无穷
  8. const nan = NaN ;//不是数字
  9. console.log(typeof(nan));

数字number类型对应的Number对象,提供了很多实用属性

  1. const bigInt = Number.MAX_SAFE_INTEGER;//最大可表示的整数
  2. const max = Number.MAX_VALUE;//最大可表示的数字
  3. const minInt = Number.MIN_SAFE_INTEGER;//人最小可表示的整数
  4. const min = Number.MIN_VALUE;//最小可表示的数字
  5. const nInf = Number.NEGATIVE_INFINITY;//-Infinity
  6. console.log(bigInt);

3.7字符串

字符串是简单的文本数据。字符串在JavaScript中表示Unicode文本。在JavaScript中,单引号,双引号重音号(反单引号)都可以表示字符串。

  1. let str1 = '这是一个单引号字符串';
  2. let str2 = "这是一个双引号字符串";
  3. let str3 = `这是一个反单引号字符串`;
  4. console.log(str3);

转义
可以使用反斜杠()对符号进行转义

  1. const dialog1 = "He looked up and said \"don't do that! \" to Max.";
  2. const dialog2 = 'He looked up and said "don\'t do that!" to Max.';
  3. console.log(dialog1);

3.8特殊字符

image.png
模板字符串

  1. let currentTemp = 19.5;
  2. //00b0是"度数"符号的Unicode
  3. const message = "The current temperature is " + currentTemp + "\u00b0c" ;
  4. console.log(message);
  5. //ES6新写法
  6. const message1 = `The current temperature is ${currentTemp}\u00b0c`;
  7. console.log(message1);

多行字符串

  1. //第一种写法 有空格
  2. const multiline1 = "第一行\
  3. 第二行";
  4. console.log(multiline1);
  5. //第二种写法 会换行
  6. const multiline2 = `第一行
  7. 第二行`;
  8. console.log(multiline2);
  9. let currentTemp = 19.5;
  10. //终极组合
  11. const multiline3 = 'Current temperature:\n'+`\t${currentTemp}\u00b0c\n`+
  12. "Don't worry...the heat is on";
  13. console.log(multiline3);

数字字符串

  1. const result1 = 3 + '30';//3被转换成字符串;结果为字符串 '330'
  2. console.log(result1);
  3. const result2 =3 * '30';// '30’被转换成数字;结果为数值90
  4. console.log(result2);

3.9布尔型

  1. let heating= true;
  2. console.log(heating);
  3. let cooling = false;
  4. console.log(cooling);

3.10符号

符号是ES6的新特性:它是一种新的数据类型,代表一个唯一的标志。符号一径创建就是独一无二的。符号是一种基本类型。Symbol()构造方法可以用来创建符号。

  1. const RED = Symbol();
  2. const ORANGE = Symbol("特殊符号");
  3. console.log(RED===ORANGE) //false:每个符号都是唯一的

3.11 null和undefined

JavaScript有两种特殊的类型,null和undefined。
它们两个都只有一个唯一的值,分别是null和undefined。
这两者都表示不存在。实际上存在两种独特的数据类型就已经造成了很大的困惑,尤其是对于初学者。
一般的经验是,null是给开发者用的,而undefined则是留给JavaScript用的,用来表示未赋值的内容。

  1. let currentTemp;//隐含值undefined
  2. console.log(currentTemp);
  3. const targetTemp = null;// targetTemp 为null --"还不知道"
  4. console.log(targetTemp);
  5. currentTemp = 19.5;//lcurrentTemp此时已经有值
  6. currentTemp = undefined;//currentTemp看上去跟未初始化一样,不推荐这么做

3.12 对象

对象是一个容器,对象可以代表多个值或者复杂值,并且这个值是可变的。对象的语法是:大括号,成对出现的。

  1. //声明一个空对象
  2. const obj={};
  3. //给空对象添加属性和属性值
  4. obj.size=10;
  5. obj.color = "yellow";
  6. //另一种访问属性的方式
  7. console.log(obj['size']);
  8. console.log(obj.color);

创建包含初始属性的对象

  1. const sam1 = {
  2. name: 'Sam',
  3. age: 4,
  4. };
  5. console.log("姓名:"+sam1.name+"年龄:"+sam1.age);

属性值也可以是对象

  1. const sam2 = {
  2. name: 'Sam ',
  3. classification: {
  4. kingdom: 'Anamalia',
  5. phylum: 'Chordata',
  6. species: 'catus' ,
  7. },
  8. };
  9. console.log("姓名:"+sam2.name+"王国:"+sam2.classification.kingdom);

属性值还可以是函数

  1. const sam3 = {
  2. name: 'Sam ',
  3. classification: {
  4. kingdom: 'Anamalia',
  5. phylum: 'Chordata',
  6. species: 'catus' ,
  7. },
  8. };
  9. sam3.speak = function(){
  10. console.log("姓名:"+sam3.name+"王国:"+sam3.classification.kingdom);
  11. }
  12. sam3.speak();

delete 删除对象中的属性

  1. delete sam3.classification;
  2. delete sam3.speak;

3.13 Number,String,和Boolean对象

数字、字符串和布尔型都有对应的对象类型 (Number,String ,Boolean)。
这些对象有两个用途:
一是存储特殊值(比如Number. INFINITY),
二是以函数的形式提供某些功能

  1. const s="hello";
  2. s.toUpperCase();
  3. console.log(s.toUpperCase());

3.14数组

数组是JavaScript的一种特殊类型的对象。
数组的内容天生具有自然排序特性
JavaScript中的数组有以下特征:
数组长度不固定,可以随时添加和删除元素。
数组中元素的类型是多样的,每个元素都可以是任意类型。
数组下标从0开始。

  1. const a1 = [1, 2, 3, 4]; //包含数值的数组
  2. const a2 = [1, 'two', 3, null]; //包含混合类型的数组
  3. const a3 = [ //跨多行的数组
  4. "chain",
  5. "brain",
  6. "grasp",
  7. "clasp"
  8. ];
  9. const a4 = [ //包含对象的数组
  10. {
  11. name: "",
  12. hardness: 9
  13. },
  14. {
  15. name: "",
  16. hardness: 9
  17. },
  18. {
  19. name: "",
  20. hardness: 9
  21. }
  22. ];
  23. const a5 = [ //包含数组的数组
  24. [1, 3, 5],
  25. [2, 4, 6]
  26. ];

数组有个属性length 用来返回数组的长度

  1. const arr=['a','b','c'];
  2. console.log(arr.length);

[0]中括号使用数字下标可以访问数组元素

  1. const arr = ['a', 'b', 'c'];
  2. console.log(arr[0]); //获得第一个元素
  3. console.log(arr[arr.length - 1]); //数组最后一个元素下标是arr.length-1
  4. arr[2] = 'd'; //指定下标元素赋值

3.15对象和数组的拖尾逗号

  1. const arr=[
  2. "One",
  3. "Two",
  4. "Three"
  5. ];
  6. const o={
  7. one:1,
  8. two:2,
  9. three:3
  10. };

对象和数组的内容跨越了多行,并且有个拖尾逗号,早期版本浏览器会产生错误。现在JavaScript语法允许这么做。最好避免这种写法。

3.16日期

在JavaScript种,日期和时间是通过内置的Date对象表示的。

  1. //创建一个当前时间
  2. const now = new Date();
  3. console.log(now);
  4. //创建一个指定日期
  5. const halloween = new Date(2016,9,31);
  6. console.log(halloween);
  7. //创建指定日期和时间
  8. const halloweenParty = new Date(2016,9,31,19,0);
  9. console.log(halloweenParty);

3.17正则表达式

正则表示是可以通过一种简洁的方式完成字符串的复杂搜索和替换。17章会详解

  1. //邮箱的正则匹配
  2. const email = /\b[a-z0-9._-]+@[a-z_-]+(?:\.[a-z]+)+\b/;
  3. //手机号码正则匹配
  4. const phone =/(:?\+1)?(:?\(\d{3}\)\s?|\d{3}[\s-]?)\d{3}[\s-]?\d4/;

3.18映射和集合

ES6引进了Map和Set,第10章详解

3.19数据类型转换

转换成数字。
第一种使用Number对象的构造方法

  1. const numStr = "33.3";
  2. const num = Number(numStr);

第二种,使用内置函数parseInt和parseFloat。

  1. const a = parseInt("16 volts",10);//" volts"忽略,16当10进制数解析
  2. console.log(a);
  3. const b = parseInt("3a",16);//解析16进制数3a
  4. console.log(b);
  5. const c = parseFloat("15.5 kph");// " kph"会被忽略
  6. console.log(c);

日期转换成数字

  1. const d = new Date();
  2. const ts = d.valueOf();
  3. console.log(ts);

布尔值转换成数字1(true)或0(false)

  1. const b = true;
  2. const n = b ? 1 : 0;
  3. console.log(n);

转换成字符串

  1. const n=33.5;
  2. const s = n.toString();
  3. const arr=[1,true,"hello"];
  4. arr.toString();

转换成布尔

  1. const n = 0;
  2. const b1 = !n;
  3. const b2 = Boolean(n);

3.20总结

JavaScript 6种基本类型(字符串,数字,布尔,null,undefined,以及符号)和对象类型
所有数字都是双精度浮点型
数组是特殊的对象类型,他将对象组合起来,能表示强大并且灵活的数据类型。
其他常用的数据类型(日期,映射,集合,正则)都是特殊类型的对象。