# 语法和数据类型MDN

# 变量

变量是表示值的一个符号名字

# 如何声明一个变量

javaScript有三种声明方式

# var

声明一个变量,可选初始化一个值。

var a;
console.log("The value of a is " + a); // a 的值是 undefined

console.log("The value of b is " + b);// b 的值是 undefined  (变量提升)
var b;

console.log("The value of c is " + c); // 未捕获的引用错误: c 未被定义
1
2
3
4
5
6
7

# let

声明一个块作用域的局部变量,可选初始化一个值。

let x;
console.log("The value of x is " + x); // x 的值是 undefined

console.log("The value of y is " + y);// 未捕获的引用错误: y 未被定义
let y;
1
2
3
4
5

# const

声明一个块作用域只读常量,不可改变(数组和对象属性可以修改)。

const PI = 3.14;
PI = 3.1415926; // 未捕获的语法错误,常数变量赋值

const obj = {
  name: "小明"
};
obj.name = "小红"
console.log(obj.name); //小红

const arr = [1,2,3,4];
arr[0] = 0;
console.log(arr); //[0,2,3,4]

1
2
3
4
5
6
7
8
9
10
11
12
13

# 数据结构和类型

# 数据类型

  • 七种基本数据类型栈(stack)

    • 布尔值(Boolean),有2个值分别是:truefalse
    • null , 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 nullNullNULL或变体完全不同。
    • undefined ,和 null 一样是一个特殊的关键字,undefined 表示变量未定义时的属性。
    • 数字(Number),整数或浮点数,例如: 42 或者 3.14159。
    let a; // 数值类型环境中 undefined 值会被转换为 NaN
    a + 1; // NaN
    //NaN是一个特殊的Number,与其他所有值都不相等,包括它自身
    console.log(NaN === NaN) // false
    
    //唯一识别NaN的方法
    console.log(isNaN(NaN))  //true
    
    1
    2
    3
    4
    5
    6
    7
    • 任意精度的整数 (BigInt) ,可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。(尚未添加到规范)
    • 字符串(String),字符串是一串表示文本值的字符序列,例如:"Howdy"。
    • 代表(Symbol) ( 在 ECMAScript 6 中新添加的类型).。一种实例是唯一且不可改变的数据类型。
  • 引用类型 堆(heap)

    • Object万物皆对象
    const obj1 = {
      name: "小明"
    };
    const obj2 = obj1; // 传地址,并不是传值。浅拷贝
    obj2.name = "小红";
    console.lo(obj1.name); // 小红
    console.lo(obj2.name); // 小红
    
    1
    2
    3
    4
    5
    6
    7
    • Function
    • Array

# 类型转换

JavaScript是一种动态类型语言(dynamically typed language)。这意味着你在声明变量时可以不必指定数据类型,而数据类型会在代码执行时会根据需要自动转换。因此,你可以按照如下方式来定义变量:

var answer = 42;
answer = "Thanks for all the fish...";
// 数字和字符串使用加法会把数字转换成字符串
x = "The answer is " + 42 // "The answer is 42"
y = 42 + " is the answer" // "42 is the answer"

"37" - 7 // 30
"37" + 7 // "377"

"37" + NaN // "37NaN"
37 + NaN // NaN
37 + undefined //NaN
37 + null // 37
1
2
3
4
5
6
7
8
9
10
11
12
13