作用域;
typeof()
constructor 属性
返回该对象的构造函数(可帮助检查对象是不是 数组,对象是不是日期等)
类型转换(显式、隐式)
显式:强制转换 String(3.14);Number(true);3.14.toString()等等;
隐式:运算符(+,-,*,/),比较运算符(>,<,==,===,!=)
正则表达式
js错误(try catch finally)
变量提升
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。初始化则不会被提升
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
以下两个实例将获得相同的结果:
实例 1
x = 5; // 变量 x 设置为 5
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x; // 在元素中显示 x
var x; // 声明 x
实例 2
var x; // 声明 x
x = 5; // 变量 x 设置为 5
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x; // 在元素中显示 x
要理解以上实例就需要理解 "hoisting(变量提升)"。
变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。
JavaScript 初始化不会提升
JavaScript 只有声明的变量会提升,初始化的不会。
严格模式
"use strict" 的目的是指定代码在严格条件下执行。
严格模式下你不能使用未声明的变量。
表单、变单验证、验证API'
let、Const
let 声明的变量只在 let 命令所在的代码块 {} (块级作用域)内有效,在 {} 之外不能访问。
const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:
var x = 10;
// 这里输出 x 为 10
{
var x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 2
let 关键字就可以解决这个问题,因为它只在 let 命令所在的代码块 {} 内有效。
var x = 10;
// 这里输出 x 为 10
{
let x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 10
javascript:void(0);
void()仅仅是代表不返回任何值,但是括号内的表达式还是要运行