语法和数据类型
声明
JavaScript 有三种声明方式。
-
var
声明一个变量,可选初始化一个值。
-
let
声明一个块作用域的局部变量,可选初始化一个值。
-
const
声明一个块作用域的只读常量。
声明变量
你可以用以下三种方式声明变量:
-
使用关键词
var
。例如var x = 42
。这个语法可以用来声明局部变量和全局变量。 -
直接赋值。例如
x = 42
。在函数外使用这种形式赋值,会产生一个全局变量。在严格模式下会产生错误。因此你不应该使用这种方式来声明变量。 -
使用关键词
let
。例如let y = 13
。这个语法可以用来声明块作用域的局部变量。
变量求值
用 var
或 let
语句声明的变量,如果没有赋初始值,则其值为 undefined
。
如果访问一个未声明的变量会导致抛出一个引用错误
(ReferenceError
)异常:
变量提升
JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined 值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。
/**
* 例子 1
*/
console.log(x === undefined); // true
var x = 3;
/**
* 例子 2
*/
// will return a value of undefined
var myvar = "my value";
(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
由于存在变量提升,一个函数中所有的var
语句应尽可能地放在接近函数顶部的地方。这个习惯将大大提升代码的清晰度。
在 ECMAScript 6 中,let
和const
同样会被提升变量到代码块的顶部但是不会被赋予初始值。在变量声明之前引用这个变量,将抛出引用错误(ReferenceError
)。这个变量将从代码块一开始的时候就处在一个“暂时性死区”,直到这个变量被声明为止。
console.log(x); // ReferenceError
let x = 3;
函数提升
对于函数来说,只有函数声明会被提升到顶部,而函数表达式不会被提升。
/* 函数声明 */
foo(); // "bar"
function foo() {
console.log("bar");
}
/* 函数表达式 */
baz(); // 类型错误:baz 不是一个函数
var baz = function() {
console.log("bar2");
};
常量
const PI = 3.14;
-
常量不可以通过重新赋值改变其值,也不可以在代码运行时重新声明。它必须被初始化为某个值。
-
常量的作用域规则与
let
块级作用域变量相同。 -
若省略
const
关键字,则该标识符将被视为变量。 -
在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。例如:
// 这会造成错误
function f() {};
const f = 5;
// 这也会造成错误
function f() {
const g = 5;
var g;
//语句
}
然而,对象属性被赋值为常量是不受保护的,所以下面的语句执行时不会产生错误。
const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";
同样的,数组的被定义为常量也是不受保护的,所以下面的语句执行时也不会产生错误。
const MY_ARRAY = ['HTML','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
数据结构和类型
数据类型
最新的 ECMAScript 标准定义了 8 种数据类型:
-
七种基本数据类型:
-
布尔值(Boolean),有 2 个值分别是:
true
和false
. -
null,一个表明 null 值的特殊关键字。JavaScript 是大小写敏感的,因此
null
与Null
、NULL
或变体完全不同。 -
undefined,和 null 一样是一个特殊的关键字,undefined 表示变量未赋值时的属性。
-
数字(Number),整数或浮点数,例如:
42
或者3.14159
。 -
任意精度的整数 (BigInt) ,可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。
-
字符串(String),字符串是一串表示文本值的字符序列,例如:"Howdy" 。
-
代表(Symbol)( 在 ECMAScript 6 中新添加的类型).。一种实例是唯一且不可改变的数据类型。
-
-
以及对象(Object)。
对象(Objects
)和函数(functions
)是这门语言的另外两个基本元素。你可以把对象当作存放值的一个命名容器,然后将函数当作你的程序能够执行的步骤。
数字转换为字符串
在包含的数字和字符串的表达式中使用加法运算符(+),JavaScript 会把数字转换成字符串。
在涉及其他运算符(译注:如下面的减号'-')时,JavaScript 语言不会把数字变为字符串。例如(译注:第一例是数学运算,第二例是字符串运算):
"37" - 7 // 30
"37" + 7 // "377"
字符串转换为数字
有一些方法可以将内存中表示一个数字的字符串转换为对应的数字。
-
parseInt()
(en-US) -
parseFloat()
parseInt
方法只能返回整数,所以使用它会丢失小数部分。另外,调用 parseInt
时最好总是带上进制 (radix) 参数,这个参数用于指定使用哪一种进制。
将字符串转换为数字的另一种方法是使用一元加法运算符。
"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2
// 注意:加入括号为清楚起见,不是必需的。
RegExp字面值
一个正则表达式是字符被斜线(译注:正斜杠“/”)围成的表达式。下面是一个正则表达式文字的一个例子。
var re = /ab+c/;标签:const,进阶,08,JavaScript,函数,var,声明,变量 From: https://www.cnblogs.com/zjy1020/p/17505995.html