本文说明:由于文章都是个人的重学侧重,会大量出现MDN的原文以及混乱说明,并不能作为学习语言的入口,仅适用于个人知识总结,偿还技术理论债的意思咱就是说。
数据类型
最新的 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 中新添加的类型).。一种实例是唯一且不可改变的数据类型。
- 布尔值(Boolean),有2个值分别是:
-
以及对象(Object)。
虽然这些数据类型相对来说比较少,但是通过他们你可以在程序中开发有用的功能。对象(Objects)和函数(functions)是这门语言的另外两个基本元素。你可以把对象当作存放值的一个命名容器,然后将函数当作你的程序能够执行的步骤。
- 数据类型应该比较好理解,不过还是引申一下
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
- 数据类型的转换
JavaScript是一种动态类型语言(dynamically typed language)。这意味着你在声明变量时可以不必指定数据类型,而数据类型会在代码执行时会根据需要自动转换。因此,你可以按照如下方式来定义变量:
var answer = 42;
然后,你还可以给同一个变量赋予一个字符串值,例如:
answer = "Thanks for all the fish...";
因为 JavaScript 是动态类型的,这种赋值方式并不会提示出错。
在涉及其它运算符(译注:如下面的减号'-')时,JavaScript语言不会把数字变为字符串。例如(译注:第一例是数学运算,第二例是字符串运算):
"37" - 7 // 30
"37" + 7 // "377"
- 字符串转数字 一元加法运算符
"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2
// 注意:加入括号为清楚起见,不是必需的。
有一些方法可以将内存中表示一个数字的字符串转换为对应的数字。like parseInt()和parseFloat()
- 字面量 (Literals)
在JavaScript中,你可以使用各种字面量。这些字面量是脚本中按字面意思给出的固定的值,而不是变量。(译注:字面量是常量,其值是固定的,而且在程序脚本运行中不可更改,比如false,3.1415,thisIsStringOfHelloworld ,invokedFunction: myFunction("myArgument")。本节将介绍以下类型的字面量:
(字面量,常量和变量之间的区别?)[www.jianshu.com/p/0f2816805…] //有个不太好,但是足以说明问题的解释,那就是 对象字面量就是引号引起来的部分,必须是等号右边的部分。虽然这样的解释不太好,但是确实如此,这就是字面量。
var a; //变量
const b = 10; //b为常量,10为字面量
let str = “hello world!”; // str 为变量,hello world!为字面量
在ES2015中,还提供了一种模板字面量(template literals),模板字符串提供了一些语法糖来帮你构造字符串 ,就是介个 ``
var bob = 123;
`123${bob}123`
- 特殊字符
\0 Null字节 \b 退格符 \f 换页符 \n 换行符 \r 回车符 \t Tab (制表符) \v 垂直制表符 ' 单引号 " 双引号 \ 反斜杠字符(\)
- 转义字符
使用如上的特殊字符进行特定情况下的字符串的字面量转义。
var home = "c:\\temp"; //c:\temp
简单的语法
// 因为基本的用法兄弟们都会,就不会过分阐述
JavaScript 是区分大小写的,并使用 Unicode字符集
- 变量提升
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");
};
小结
这一章比较基础,基本上没有特别复杂的概念,可能字面量需要理解一下,基本的数据类型需要知道哪些是引用类型。转义可以理解一下,大头还是变量提升滴干活。