如果 JavaScript 语句太长,对其进行折行的最佳位置是某个运算符:
这点以前做iOS 安卓开发没太注意
var 声明之后,变量是没有值的。(技术上,它的值是 undefined
。)
在这两条语句执行后,变量 carName 的值仍然是 "porsche":
var carName = "porsche";
var carName;
ES2015 引入了两个重要的 JavaScript 新关键词:let
和 const
。
这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量(和常量)。
在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域和函数作用域。
通过 var
关键词声明的变量没有块作用域。
在块 {} 内声明的变量可以从块之外进行访问。
{
var x = 10;
}
// 此处可以使用 x
可以使用 let
关键词声明拥有块作用域的变量。
在块 {} 内声明的变量无法从块外访问:
{
let x = 10;
}
// 此处不可以使用 x
HTML 中的全局变量
使用 JavaScript 的情况下,全局作用域是 JavaScript 环境。
在 HTML 中,全局作用域是 window 对象。
通过 var
关键词定义的全局变量属于 window 对象:
var carName = "porsche";
// 此处的代码可使用 window.carName
通过 let
关键词定义的全局变量不属于 window 对象:
let carName = "porsche";
// 此处的代码不可使用 window.carName
通过 var 声明的变量会提升 (hoisting) 到顶端. 您可以在声明变量之前就使用它. let 不行.
// 在此处,您可以使用 carName
var carName;
// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};
// 您可以更改属性:
car.color = "White";
// 您可以添加属性:
car.owner = "Bill";
const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"}; // ERROR
+=
赋值运算符也可用于相加(级联)字符串:
var x = {firstName:"Bill", lastName:"Gates"}; // 对象
typeof 运算符对数组返回 "object",因为在 JavaScript 中数组属于对象。
任何变量均可通过设置值为 undefined
进行清空。其类型也将是 undefined
。
空值与 undefined
不是一回事。
空的字符串变量既有值也有类型。
Null
在 JavaScript 中,null
是 "nothing"。它被看做不存在的事物。
不幸的是,在 JavaScript 中,null
的数据类型是对象。
您可以把 null
在 JavaScript 中是对象理解为一个 bug。它本应是 null
。
您可以通过设置值为 null
清空对象:
var person = null; // 值是 null,但是类型仍然是对象
您也可以通过设置值为 undefined
清空对象:
var person = undefined; // 值是 undefined,类型是 undefined。
Undefined
与 null
的值相等,但类型不相等:
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
typeof
运算符可返回以下两种类型之一:
- function
- object
typeof
运算符把对象、数组或 null
返回 object
。
typeof
运算符不会把函数返回 object
。
对象的函数属性:
var person = {
firstName: "Bill",
lastName : "Gates",
id : 678,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
可以用[]访问对象的属性:
person["lastName"];
字符串中换行,反斜杠
document.getElementById("demo").innerHTML = "Hello \
Kitty!";
对长字符串换行的最安全做法(但是有点慢)是使用字符串加法:
document.getElementById("demo").innerHTML = "Hello" +
"Kitty!";
Back-Tics 语法
模板字面量使用反引号 (``) 而不是引号 ("") 来定义字符串:
let text = `Hello World!`;
插值
模板字面量提供了一种将变量和表达式插入字符串的简单方法。
该方法称为字符串插值(string interpolation)。
语法
${...}
变量替换
模板字面量允许字符串中的变量,用真实值自动替换变量称为字符串插值:
let firstName = "Bill";
let lastName = "Gates";
let text = `Welcome ${firstName}, ${lastName}!`;
let price = 10;
let VAT = 0.25;
let total = `Total: ${(price * (1 + VAT)).toFixed(2)}`;
let header = "Templates Literals";
let tags = ["template literals", "javascript", "es6"];
let html = `<h2>${header}</h2><ul>`;
for (const x of tags) {
html += `<li>${x}</li>`;
}
html += `</ul>`;
NaN
属于 JavaScript 保留词,指示某个数不是合法数。
尝试用一个非数字字符串进行除法会得到 NaN(Not a Number):
var x = 100 / "Apple"; // x 将是 NaN(Not a Number)
不过,假如字符串包含数值,则结果将是数:
var x = 100 / "10"; // x 将是 10