基本类型(原始类型):
引用类型:
除了以上列出的数据类型外,JavaScript 中还有一些特殊的数据类型,例如 Symbol(表示唯一的标识符)和 BigInt(表示任意精度的整数)。
需要注意的是,JavaScript 是一种动态类型语言,变量的数据类型是在运行时确定的,可以随时根据需要改变变量的类型。
另外,可以使用?typeof
?运算符来检查一个值的数据类型。例如,typeof "hello"
?返回 “string”,typeof 42
?返回 “number”。但是需要注意?typeof null
?的返回值是 “object”,这是一个历史遗留问题。
在 JavaScript 中,可以使用数字字面量来定义一个数字。数字字面量可以是整数或小数,并且可以使用科学计数法表示非常大或非常小的数。
以下是定义数字的几种方式:
// 整数
let a = 123;
// 小数
let b = 3.14;
// 科学计数法
let c = 6.02e23; // 6.02乘以10的23次方,即 6.02×1023
let d = 1.2345e-6; // 1.2345乘以10的负6次方,即 1.2345×10??
需要注意的是,在 JavaScript 中,数字是一种原始类型。当您使用算术运算符(+、-、*、/、% 等)对数字进行计算时,会得到一个新的数字作为结果。
另外,JavaScript 中还有一些特殊值,例如 Infinity(无穷大)、-Infinity(负无穷大)和 NaN(不是数字)。这些值也属于数字类型,但不是有效的数字值,需要注意。
let
?和?var
?都是 JavaScript 中用于声明变量的关键词。它们之间的主要区别在于作用域和变量提升的行为上。
作用域
var
?声明的变量属于函数作用域或全局作用域,而?let
?声明的变量属于块级作用域。块级作用域是一对花括号({})中的任何语句,例如?if
、for
?或?while
?循环语句。
示例:
function example() {
var x = 1;
if (true) {
var x = 2;
}
console.log(x); // 2
}
example();
function example2() {
let y = 1;
if (true) {
let y = 2;
}
console.log(y); // 1
}
example2();
在第一个示例中,var
?声明的?x
?变量的作用域是函数作用域,其在?if
?块中重复声明(该块也属于函数作用域)。所以?console.log(x)
?打印的结果是?2
。
在第二个示例中,let
?声明的?y
?变量的作用域是块级作用域(即?if
?块)。所以?console.log(y)
?打印的结果是?1
。
变量提升
在使用?var
?声明变量时,它们会被提升到它们所在作用域的顶部,在声明之前的任何地方都可以访问它们。这种行为被称为变量提升。
示例:
function example() {
console.log(x); // undefined
var x = 1;
}
example();
上面的示例中,var
?声明的?x
?变量会被提升到函数作用域的顶部,但它没有被赋值,因此第一行打印出来的是?undefined
。
在使用?let
?声明变量时,变量在声明之前不会被访问,不会存在变量提升的行为。
综上所述,let
?比?var
?更容易控制变量的作用域,不会存在变量提升的问题。建议在使用变量时优先使用?let
,避免因为变量提升问题导致的不良后果。