背景图片

JavaScript 权威指南(犀牛书) 第 1 章:JavaScript 简介

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

1.1 探索 JavaScript

JavaScript 解释器

打开浏览器的 Web 开发者工具(按 F12、Ctrl+Shift+I 或 Command+Option+I) > 选择 console(控制台)标签页

下载并安装 Node > 打开终端窗口 > 输入 node 并回车

1.2 Hello World

console.log("Hello World!");

1.3 JavaScript 之旅

1.4 示例:字符频率柱形图

1.5 小结

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")