1995 年,Brendan Eich(布兰登·艾奇)在 Netscape(网景)公司仅用 10 天时间开发了 JavaScript 的第一个版本,最初命名为 Mocha,后来改名为 LiveScript。不久之后,为了借用 Java 语言的市场热度,LiveScript 被正式命名为 JavaScript,尽管它与 Java 语言关系不大,这只是 Netscape 公司的一种营销策略。1996 年,微软推出了 JScript,这是 JavaScript 的一个克隆版本,用于其 Internet Explorer 浏览器。JavaScript 和 JScript 的出现导致浏览器间的兼容性问题。1997 年,为了解决兼容性问题,Netscape 向 Ecma International(European Computer Manufacturers Association,欧洲计算机制造商协会)提交了 JavaScript,最终制定了 ECMAScript 标准。Java 的商标属于 Sun Microsystems(后来被 Oracle 收购),JavaScript 的名字受到了商标保护的约束,Netscape 并不能在标准化过程中使用 “JavaScript” 这个名字作为语言的正式名称。
Ecma International
ECMAScript ES ES6
JavaScript 解释器
打开浏览器的 Web 开发者工具(按 F12、Ctrl+Shift+I 或 Command+Option+I) > 选择 console(控制台)标签页
下载并安装 Node > 打开终端窗口 > 输入 node 并回车
console.log("Hello World!");
console.log(123);
const greeting = "Hello";
let place = "World";
console.log("%s %s!", greeting, place);
console.log(`${greeting} ${place}!`);
place = "JS";
console.log("%s %s!", greeting, place);
if (true) {
let place = "JavaScript";
console.log("%s %s!", greeting, place);
}
console.log("%s %s!", greeting, place);
let str1 = "Thank ";
let str2 = "you";
let num1 = 3;
let num2 = 8;
let bool = true;
console.log(str1 + str2 + " very much!");
console.log(num1 + num2);
console.log(`1 + 1 is ${1 + 1}`);
console.log(`The opposite of ture is ${!bool}`);
const drink = ["tea", "coffee", "coco"];
const person = {
firstname: "Alon",
lastname: "Musk",
}
function sayHello(person) {
console.log("Hello " + person.lastname)
}
console.log("\n-- typeof --");
console.log(typeof str1);
console.log(typeof num1);
console.log(typeof bool);
console.log(typeof drink);
console.log(typeof person);
console.log(typeof sayHello);
console.log("\n-- instanceof --");
console.log(str1 instanceof String);
console.log(num1 instanceof Number);
console.log(bool instanceof Boolean);
console.log(drink instanceof Array);
console.log(person instanceof Object);
console.log(sayHello instanceof Function);
console.log("\n-- Basic Math --")
console.log(num2 + 2); //addition add
console.log(num2 - 1); //subtraction [səbˈtrækʃ(ə)n] subtract
console.log(num2 * 3); //multiplication multiply
console.log(num2 / 2); //division divide
console.log("\n-- Additional Mathematical Operations --")
console.log(num2 % 3); //remainder ramain
console.log(++num2); //increment increase
console.log(--num2); //decrement decrease
console.log("\n-- Using the Math Object --")
console.log(Math.PI);
console.log(Math.sqrt(num2)); //square root
let int1 = "10";
let flo1 = "2.5";
console.log("\n-- Coversing Strings to Integers --")
console.log(parseInt(int1)); //integer [ˈɪntɪdʒər]
console.log(parseInt("100"));
console.log(parseInt("1.5"));
console.log(parseInt("1 + 1"));
console.log(parseInt(`${1 + 1}`));
console.log(parseInt("ABC"));
console.log("\n-- Coversing Strings to Float --")
console.log(parseFloat("1.00"));
console.log(parseFloat(flo1));
console.log(parseInt("ABC"));
console.log("\n-- Coversing Numbers to Strings --")
console.log(num2.toString());
function criticalCode() {
throw "Throwing an exception.";
}
function logError(theException) {
console.log(theException);
}
console.log("\n-- Throwing Exceptions --")
//throw 'myException';
//throw true;
console.log("\n-- Try Catch --");
try {
criticalCode();
} catch (ex) {
console.log("Got an error!");
logError(ex);
}
console.log("\n-- Throwing in Try Catch --");
try {
throw "An exception that is thrown everytime.";
} catch (ex) {
console.log("Got an error!");
logError(ex);
}
console.log("\n-- Try Catch Finally --");
try {
throw "An exception that is thrown everytime.";
} catch (ex) {
console.log("Got an error!");
logError(ex);
} finally {
console.log("Code that always will run.");
}
console.log("\n-- Dates --");
const date = new Date();
console.log(date);
date.setMonth(1);
console.log(date);
console.log(date.getDate());
console.log(new Date().getFullYear());
console.log("\n-- Boolean Logic with if Statements --");
if (num1 === 3) {
console.log("Right!");
} else if (num1 === 8) {
console.log("Wrong!");
} else {
console.log("Unknown!");
}
console.log("\n-- Boolean Logic with switch and Other syntax --"); //syntax [ˈsɪntæks] 语法
const message1 = (num1 === 7 && num2 == 8) ? "Y" : "N";
console.log(message1);
const message2 = (num1 === 7 || num2 == 8) ? "Y" : "N";
console.log(message2);
if (!message1) {
console.log("N");
} else {
console.log("Y");
}
if (greeting.toUpperCase() === "HELLO") {
console.log("somethingWrong");
} else {
console.log("look OK");
}
switch (num2) {
case 8:
console.log("8");
break;
case 9:
console.log("9");
break;
case 7:
console.log("7");
break;
default:
break;
}
let arrayLenth = 5;
let arr1 = [];
let arr2 = Array(arrayLenth);
console.log("\n-- Creating Arrays --") //array 数组
console.log(arr1.length);
console.log(arr2.length);
console.log("\n-- Populating Arrays --"); //populate 填充
arr2[0] = "first item in an array";
console.log(arr2[0]);
console.log(arr2[1]);
arr1 = ["A", true, 2]
arr2 = [1, 2, 3]
console.log("\n-- Array Methods --");
console.log(arr1);
console.log(arr1.push("B"));
console.log(arr1);
console.log(arr1.pop());
console.log(arr1);
console.log(arr1.unshift("B"));
console.log(arr1);
console.log(arr1.shift());
console.log(arr1);
let newarr1 = arr1.concat(arr2);
let newarr2 = arr2.concat([4, 5, 6]);
console.log(newarr1);
console.log(newarr2);
console.log("\n-- Loops --");
const names = ["James", "Max", "Micheal"];
let index = 0;
while (index < names.length) {
console.log(names[index]);
index++;
}
for (index = 0; index < names.length; index++) {
console.log(names[index]);
}
for (let name of names) {
console.log(name);
}
console.log("\n-- Functions --")
function printHello(place) {
console.log("Hello " + place + "!");
}
printHello("World");
function returnCost(price, number) {
let cost = price * number;
return cost;
}
cost = returnCost(4, 23);
console.log(cost);
console.log("\n-- Arrow and Anonymous Function --")
const add = (a, b) => a + b;
console.log(add(2, 3));
const subtract = (a, b) => {
return a - b;
}
console.log(subtract(4, 3));
console.log("\n-- Javascript Object Notation (JSON)--")
const book = [
{
title: "1984",
auther: "George Orwell",
isAvailable: false,
checkIn: function(){
this.isAvailable = true;
},
checkOut: function() {
this.isAvailable = false;
},
},
{
title: "Become",
auther: "Michelle Obama",
isAvailable: false,
}
];
const bookJSON = JSON.stringify(book);
console.log(bookJSON);
let parsed = JSON.parse(bookJSON);
console.log(parsed);
console.log(parsed[1].auther);
book[0].auther = "G. Orwell";
console.log(book[0].auther);
console.log(book[1]["auther"]);
book[0].checkIn();
console.log(book[0].isAvailable);
console.log("\n-- Promises for Long Runing Operations")