最近开始把精力放在从新复习JavaScript的基础知识上面,再也不太追求各类花枝招展的前端框架,框架再多,适合实际项目才是最重要。
上星期在掘金发布了几篇文章,其中最大块算是 【复习资料】ES6/ES7/ES8/ES9资料整理(我的整理),也是让我好好把这些规范复习了一遍,虽然不是彻底的原创,而是本身的一些复习笔记,可是仍是让我感受仍是挺有用的,在项目开发过程当中,有有意识的去使用到这些新的规范。
此次开始复习 MDN 这个系列的文章,巩固好本身的基础,也让本身养成记录学习的习惯,固然这些文章我也会同步到本身的博客。
但愿本身的文章会对各位有所帮助,也欢迎各位大佬指点。前端
正文开始git
本章节复习的是JS中的基本语法,变量声明,数据类型和字面量。github
首先要记住:JavaScript 对大小写敏感,即var att;
和 var Att
是两个不一样变量。数组
// 单行注释
/* 多行注释 */
复制代码
JavaScript有三种声明方式:浏览器
var
声明一个变量,可赋一个初始值。let
声明一个块做用域的局部变量,可赋一个初始值。const
声明一个块做用域的只读命名的常量。变量的名字又叫作“标识符”,必须以字母、下划线(_
)或者美圆符号($
)开头,而且区分大小写。
变量声明有三种方式:前端框架
var a = 1
,声明局部变量和全局变量。a = 1
,声明一个全局变量,且在严格模式报错,不该该使用。let a = 1
,声明一个块做用域的局部变量。注意:微信
undefined
;let a;
console.log(a); // undefined
复制代码
ReferenceError
错误;console.log(b); // Uncaught ReferenceError: b is not defined
复制代码
undefined
时,布尔值环境会当作false
,数值环境会当作NaN
;var a;
if(!a){
console.log('a为undefined'); // a为undefined
}
a + 1; // NaN
复制代码
null
时,布尔值环境会当作false
,数值环境会当作0
;let a = null;
if(!a){
console.log('a为unll'); // a为unll
}
a + 1; // 1
复制代码
全局变量:即声明在函数以外,当前文档全部地方均可以访问;
局部遍历:即声明在函数内部,仅在当前函数内能够访问;
在ES5以前没有语句块做用域的概念,并只能使用var
进行声明,用var
声明的变量,在函数内和全局均可以访问,而在ES6开始,将只能在声明的做用域中使用:数据结构
if(true){
var a = 1;
}
a; // 1
if(true){
let b = 2;
}
b; // ReferenceError: b is not defined
复制代码
即将变量的声明提高到函数或语句的顶部,并返回undefined
直到变量被初始化操做。
千万注意:
ES5以及以前,才有变量声明提早,ES6开始let绑定不受变量提高的约束(存在暂时死区),这意味着 let 声明不会被提高到当前执行上下文的顶部。在块中的变量初始化以前,引用它将会致使 ReferenceError。框架
// ES5及以前
console.log(a); // undefined
var a = 1;
console.log(a); // 1
// ES6开始
console.log(b); // Uncaught ReferenceError: b1 is not defined
let b = 2;
console.log(b); // 2
复制代码
函数声明有两种方式:函数声明和函数表达式两种方式:ide
// 函数声明
f(); // 'hi leo'
function(){
console.log('hi leo');
};
// 函数表达式
g(); // Uncaught TypeError: g is not a function
var g = function(){ // 换成 let 声明也同样
console.log('hi leo');
}
复制代码
全局变量默认是全局对象(window
)的属性,经常使用window.variable
语法来设置和访问全局变量。
这边还须要记住:
window
,Node中是global
对象);var
/function
声明的全局变量,依然是顶层对象的属性,可是let
/const
/class
声明的全局变量不属于顶层对象的属性,即ES6开始,全局变量和顶层对象的属性是分开的。// ES5
var a = 'leo';
window.a; // 'leo'
// ES6
let b = 'leo';
window.b; // undefined
复制代码
ES6以后咱们可使用const
来声明一个只读的常量,而且在声明时必须赋值,以后在相同做用域中不能赋值也不能从新声明,不然报错。
const a;
// Uncaught SyntaxError: Missing initializer in const declaration
const b = 'leo';
b = 'hi';
// Uncaught TypeError: Assignment to constant variable.
function f(){
const a1 = 'hi';
console.log(a1);
}
f(); // 'hi'
const a1 = 'hi leo';
a1; // "hi leo"
复制代码
尽管const
声明的变量不能直接修改值,可是对于对象和数组,倒是不受保护能够修改的:
const a = {name:'leo',age:25};
a.name = 'pingan'; // a => {name: "pingan", age: 25}
const b = ['hi', 'leo'];
b[1] = 'pingan'; // b => ["hi", "pingan"]
复制代码
JavaScript中一共分为7中不一样类型:
null
/Null
/NULL
彻底不一样);100
;因为JavaScript是门动态类型语言,所以在开发过程能够不须要指定数据类型,在执行时会自动转换:
var a = 100;
a = 'hi leo'; // 这样不报错
复制代码
另外还有:
let a1 = '10';
let b1 = 20;
a1 + b1; // 30
let a2 = 'leo ' + 10 + ' age'; // 'leo 10 age'
'10' - 5; // 5
'10' + 5; // 105
复制代码
转换字符串为数字小技巧
小技巧不少,这里说个最简单的:
// 这样不会使两个数字计算总和:
'1.1' + '1.2'; // '1.11.2'
// 实际上要这样:
+'1.1' + +'1.2'; // 2.3
复制代码
字面量是用来表示如何表达这个值,简单理解就是变量赋值时右边的都是字面量。好比:
let a = 'hi leo';
复制代码
hi leo
为字符串字面量,a
为变量名。
字面量分为七种:
使用数组字面量建立数组的时,指定元素的值,并做为数组的初始化,从而肯定数组长度。
let a = ['hi','leo','hello','pingan'];
a[1]; // 'leo'
a.length; // 4
复制代码
若使用多余逗号,做为数组字面量,则值为undefined
,而且数组长度也会正常计算:
let a = ['hi', ,'leo'];
a[0]; // 'hi'
a[1]; // undefined
a.length; // 3
复制代码
只有true
和false
:
let a = true;
复制代码
整数能够用十进制(基数为10)、十六进制(基数为16)、八进制(基数为8)以及二进制(基数为2)表示。
浮点数字面量组成:
let a = 3.14; // 3.14
let b = -.001; // -0.001
let c = -3.14e+12; // -3.14*1012
let d = .1e-23;// 0.1*10 - 23 = 10-24 = 1e-24
复制代码
对象字面量是由{}
包含一个或多个 键:值
对的列表:
let a1 = 'hi leo';
let a2 = function(){ return 'my name is pingan' };
let obj = {
n1 : 'pingan',
n2 : a1,
n3 : a2()
}
obj; // {n1: "pingan", n2: "hi leo", n3: "my name is pingan"}
复制代码
也可使用任意数字或字符串做为对象属性的名字,但必须用''
引号包裹:
let obj = {
"" : "hi leo",
"!" : "hi pingan",
2 : 'hi number'
}
obj; // {2: "hi number", "": "hi leo", !: "hi pingan"}
obj[""]; // "hi leo"
obj[2]; // "hi number"
复制代码
使用字符被正斜杠“/
”围起来的表达式:
var a = /ab+c/;
复制代码
使用单引号(''
)或者双引号(""
)括起来的字符串:
let a = 'leo';
a.length; // 3
复制代码
ES6中新增了模板字符串,做用于:
// 拼接字符串
let name = 'leo';
let a = ` hi ${name} `;
a; // 'hi leo'
// 换行
let b = ` hi leo `;
b;
// "
// hi
// leo
// "
复制代码
经常使用特殊字符:
字符 | 含义 |
---|---|
\b | 退格符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | Tab (制表符) |
\v | 垂直制表符 |
' | 单引号 |
" | 双引号 |
\ | 反斜杠字符(\) |
本部份内容到这结束
Author | 王平安 |
---|---|
pingan8787@qq.com | |
博 客 | www.pingan8787.com |
微 信 | pingan8787 |
每日文章推荐 | github.com/pingan8787/… |
JS小册 | js.pingan8787.com |
欢迎关注个人微信公众号【前端自习课】