常用代码
交互
alert();
prompt();
result = prompt(title[, default]);
浏览器会显示一个带有文本消息的模态窗口,还有 input 框和确定/取消按钮。
confirm
result = confirm(question);
confirm 函数显示一个带有 question 和两个按钮的模态窗口:确定和取消。
点击确定返回 true,点击取消返回 false。
多个条件:“else if”
if (year < 2015) {
alert( 'Too early...' );
} else if (year > 2015) {
alert( 'Too late' );
} else {
alert( 'Exactly!' );
}
三元运算符 ‘?’
let result = condition ? value1 : value2
计算条件结果,如果结果为真,则返回 value1,否则返回 value2。
逻辑运算符:|| (或), && (与), ! (非)。
while
while (condition) {
// 代码
// 所谓的“循环体”
}
“do…while” 循环
do {
// 循环体
} while (condition);
循环首先执行循环体,然后检查条件,当条件为真时,重复执行循环体。
“for” 循环
for (begin; condition; step) {
// ... loop body ...
}
通过示例来了解这部分的含义。下述循环运行从 i 等于 0 到 3(但不包括 3)的 alert(i):
for (let i = 0; i < 3; i++) { // 结果为 0、1、2
alert(i);
}
跳过
for 循环的任何部分都可以被跳过。
let i = 0; // 我们已经声明并分配了
for (; i < 3; i++) { // "begin" 部分不再需要
alert( i ); // 0, 1, 2
}
也可以移除 step 部分:
let i = 0;
for (; i < 3;) {
alert( i++ );
}
实际上我们可以删除所有内容,从而创建一个无限循环:
for (;;) {
// 无限循环
}
请注意 for 的两个 ; 必须存在,否则会出现语法错误。
continue; break;
跳到标签
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`Value at coords (${i},${j})`, '');
// 如果是空字符串或已取消,则中断这两个循环。
if (!input) break outer; // (*)
// 做些有价值的事
}
}
“switch” 语句
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
函数声明
function showMessage(text = "no text given") {
alert( 'Hello everyone!' );
return;
}
命名技巧
showMessage(..) // 显示信息
getAge(..) // 返回 age (gets it somehow)
calcSum(..) // 计算求和并返回结果
createForm(..) // 创建表格 (通常会返回它)
checkPermission(..) // 检查权限并返回 true/false
PS:当 JavaScript 准备运行脚本或代码块时,它首先在其中查找函数声明并创建函数。我们可以将其视为“初始化阶段”.
因此,声明为函数声明的函数可以比定义的更早调用。
pow(x,n)
将 x 与自身相乘 n 次,然后返回结果。
函数表达式
let sayHi = function() {
alert( "Hello" );
};
回调函数&匿名函数
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
ask(
"Do you agree?",
function() { alert("You agreed."); },
function() { alert("You canceled the execution."); }
);
箭头函数
let func = function(arg1, arg2, ...argN) {
return expression;
}
let sum = (a, b) => a + b;
/* 箭头函数更短:
let sum = function(a, b) {
return a + b;
};*/
let double = n => n * 2; 只有一个参数,那么括号可以省略
let sayHi = () => alert("Hello!"); 没有参数,括号应该是空的
编码风格

if (condition) {
// do this
// ...and that
// ...and that
}
“for…in” 循环
为了使用对象所有的属性,就可以利用 for..in 循环。这跟 for(;;) 是完全不一样的东西。
let user = {
name: "John",
age: 30,
isAdmin: true
};
for(let key in user) {
// keys
alert( key ); // name, age, isAdmin
// 属性键的值
alert( user[key] ); // John, 30, true
}
Symbol 是唯一标识符的基本类型
Symbol 使用 Symbol() 创建的,调用带有一个可选的描述。
let id1 = Symbol("id");
let id2 = Symbol("id");
alert(id1 == id2); // false
Symbol 总是不同的值,即使它们有相同的名称。如果我们希望同名 Symbol 相等,那么我们应该使用全局注册表:Symbol.for(key) 返回(如果需要的话创建)一个以 key 作为名称的全局 Symbol。Symbol.for 的多次调用完全返回相同的 Symbol。
方法中的 “this”
对象方法需要访问对象中的存储的信息来完成其工作。为了访问该对象,方法中可以使用 this 关键字。
let user = {
name: "John",
age: 30,
sayHi() {
alert(this.name);
}
};
user.sayHi(); // John
this 的值就是在点之前的这个对象,即调用该方法的对象
构造函数
构造函数在技术上是常规函数。不过有两个约定:
他们首先用大写字母命名。
它们只能用 "new" 操作符来执行。这样的调用意味着在开始时创建空的 this,并在最后返回填充的对象。
例如:
function User(name) {
this.name = name;
this.isAdmin = false;
}
let user = new User("Jack");
alert(user.name); // Jack
alert(user.isAdmin); // false
当一个函数作为 new User(...)执行时,它执行以下步骤:
一个新的空对象被创建并分配给 this。
函数体执行。通常它会修改 this,为其添加新的属性。返回 this 的值。
字符串
字符串可以包含在单引号、双引号或反引号中.
单引号和双引号本质上是一样的。但是,反引号允许我们将任何表达式嵌入到字符串中,包括函数调用.
反引号的另一个优点是它们允许字符串跨行
alert( `My\n`.length ); //length 属性有字符串长度
let str = `Hello`;
alert( str[1000] ); // undefined
alert( str.charAt(1000) ); // '' (an empty string)
数组
let arr = new Array();
let arr = [];
push 在末端添加一个元素.pop 从末端取出一个元素.
shift取出数组的第一个元素并返回它.unshift在数组的前端添加元素
性能push/pop 方法运行的比较快,而 shift/unshift 比较慢。
遍历
let fruits = ["Apple", "Orange", "Plum"];
// 迭代数组元素
for (let fruit of fruits) {
alert( fruit );
}
let arr = ["Apple", "Orange", "Pear"];
for (let i = 0; i < arr.length; i++) {
alert( arr[i] );
}
alert( arr.length );
delete
元素被删除,但数组长度不变
splice
arr.splice(index[, deleteCount, elem1, ..., elemN])
索引,删除个数,替换。并且返回删除的元素
slice
arr.slice(start, end)
它从所有元素的开始索引 "start" 复制到 "end" (不包括 "end") 返回一个新的数组。
concat
arr.concat(arg1, arg2...)
查询数组
这些是在数组中查询某些内容的方法。
indexOf/lastIndexOf 和 includes
arr.indexOf、arr.lastIndexOf 和 arr.includes 方法与字符串操作具有相同的语法,只不过这里是对数组元素而不是字符进行操作:
arr.indexOf(item, from) 从索引 from 查询 item,如果找到返回索引,否则返回 -1。
arr.lastIndexOf(item, from) — 和上面相同,只是从尾部开始查询。
arr.includes(item, from) — 从索引 from 查询 item,如果找到则返回 true。