"上层"语言
- 允许开发者使用另一种语言编写代码并会将其“自动转换”为 JavaScript。
- CoffeeScript
- JavaScript 的一种语法糖。它引入了更加简短的语法,使我们可以编写更清晰简洁的代码。
- TypeScript
- 专注于添加“严格的数据类型”以简化开发,以更好地支持复杂系统的开发。
- Flow
- 也添加了数据类型,但是以一种不同的方式。
- Dart
- 是一门独立的语言。它拥有自己的引擎,该引擎可以在非浏览器环境中运行(例如手机应用),它也可以被编译成 JavaScript。
script标签
- JavaScript 程序可以在
<script>
标签的帮助下插入到 HTML 文档的任何地方。 <script\>
标签中包裹了 JavaScript 代码,当浏览器遇到<script\>
标签,代码会自动运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!DOCTYPE HTML> <html> <body> <p>script 标签之前...</p> <script> alert('Hello, world!'); </script> <p>...script 标签之后</p> </body> </html> |
外部脚本
- 如果你有大量的 JavaScript 代码,我们可以将它放入一个单独的文件。
- 脚本文件可以通过
src
特性(attribute)添加到 HTML 文件中。
1 |
<script src="/path/to/script.js"></script> |
URL
1 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script> |
多个脚本
1 2 3 |
<script src="/js/script1.js"></script> <script src="/js/script2.js"></script> … |
注意
- 如果设置了
src
特性,script
标签内容将会被忽略。
基础知识一
分号
- 即使语句被换行符分隔了,我们依然建议在它们之间加分号。
注释
- 需要注意的是不支持注释嵌套
1 2 3 4 |
// 这行注释独占一行 alert('Hello'); alert('World'); // 这行注释跟随在语句后面 |
1 2 3 4 5 |
/* 两个消息的例子。 这是一个多行注释。 */ alert('Hello'); alert('World'); |
use strict
- 当它处于脚本文件的顶部时,则整个脚本文件都将以“现代”模式进行工作。
- 要确保
"use strict"
出现在脚本的最顶部,否则严格模式可能无法启用。 - 一旦进入了严格模式,没有返回默认模式的方法。
1 2 3 4 |
"use strict"; // 代码以现代模式工作 ... |
变量
- 在 JavaScript 中创建一个变量,我们需要用到
let
关键字。 var
关键字与let
大体 相同,也用来声明变量,但稍微有些不同,也有点“老派”。- 作用域方面的区别:
var
声明的变量在其声明的函数内是局部的,而在函数外部是全局的var
在函数外部声明的变量,将成为全局变量,并且被添加到全局对象let
声明的变量是块级作用域,只在包含他们的块内部{}
可用
- 变量提升方面的区别:
var
声明的变量存在变量提升现象,意味着变量可以在其声明之前被访问,但是其值是undefined
。因为变量声明会被提升到其作用域的顶部let
声明的变量同样存在变量提升,但是在声明前访问会报ReferenceError
错误,因为变量在生灵之前不会被初始化
1 2 |
console.log(x); // 输出 undefined var x = 10; |
- 重复声明方面的区别:
var
声明的变量可以被多次声明而不会引发错误,新的声明会覆盖旧的声明let
声明的变量不能在同一作用域内被重复声明
1 2 3 4 |
let message; message = 'Hello!'; alert(message); // 显示变量内容 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 使用 var 声明变量 var x = 10; console.log(x); // 输出 10 { var x = 20; console.log(x); // 输出 20 } console.log(x); // 输出 20 // 使用 let 声明变量 let y = 10; console.log(y); // 输出 10 { let y = 20; console.log(y); // 输出 20 } console.log(y); // 输出 10 |
- 关于变量提升:
- 变量提升的行为在于
JavaScript
引擎在执行代码之前会扫描代码,将变量和函数声明提升到作用域的顶部 - 具体来说,当
JavaScript
引擎在执行代码之前扫描代码时,它会查找并记住所有变量和函数的声明,并将它们添加到作用域的顶部,这意味着它们在代码中的实际位置之前被“提升” - 如下示例:虽然变量 x 和函数 foo 的声明出现在它们的实际使用之后,但由于变量提升的存在,它们在作用域的顶部被提升,因此代码仍然有效
- 变量提升的行为在于
1 2 3 4 5 6 7 |
console.log(x); // undefined var x = 10; foo(); // "Hello, world!" function foo() { console.log("Hello, world!"); } |
变量命名
- 变量名称必须仅包含字母,数字,符号
$
和_
。 - 首字符必须非数字。
保留字
break
case
catch
class
const
continue
debugger
default
delete
do
else
export
extends
finally
for
function
if
import
in
instanceof
new
return
super
switch
this
throw
try
typeof
var
void
while
with
yield
常量
1 |
const myBirthday = '18.04.1982'; |
数据类型
- 在 JavaScript 中有 8 种基本的数据类型(译注:7 种原始类型和 1 种引用类型)
- 我们可以将任何类型的值存入变量。
1 2 3 |
// 没有错误 let message = "hello"; message = 123456; |
- Number类型
Infinity
、-Infinity
和NaN
。
1 2 |
let n = 123; n = 12.345; |
- BigInt类型
- 在 JavaScript 中,“number” 类型无法表示大于
(253-1)
(即9007199254740991
),或小于-(253-1)
的整数。 BigInt
类型是最近被添加到 JavaScript 语言中的,用于表示任意长度的整数。- 可以通过将
n
附加到整数字段的末尾来创建BigInt
值。
- 在 JavaScript 中,“number” 类型无法表示大于
1 2 |
// 尾部的 "n" 表示这是一个 BigInt 类型 const bigInt = 1234567890123456789012345678901234567890n; |
- String类型
- 双引号:
"Hello"
. - 单引号:
'Hello'
. - 反引号:
<code>Hello
. - 双引号和单引号都是“简单”引用,在 JavaScript 中两者几乎没有什么差别。
- 反引号是 功能扩展 引号。它们允许我们通过将变量和表达式包装在
${…}
中,将它们嵌入到字符串中。
- 双引号:
1 2 3 |
let str = "Hello"; let str2 = 'Single quotes are ok too'; let phrase = `can embed another ${str}`; |
1 2 3 4 5 6 7 |
let name = "John"; // 嵌入一个变量 alert( `Hello, ${name}!` ); // Hello, John! // 嵌入一个表达式 alert( `the result is ${1 + 2}` ); // the result is 3 |
- Boolean类型
1 2 3 4 5 |
let nameFieldChecked = true; // yes, name field is checked let ageFieldChecked = false; // no, age field is not checked let isGreater = 4 > 1; alert( isGreater ); // true(比较的结果是 "yes") |
- "null"值
- 它是一个独立的类型,只包含null值
- JavaScript 中的
null
仅仅是一个代表“无”、“空”或“值未知”的特殊值。
1 |
let age = null; |
- "undefined"值
- 含义是未被赋值
- 如果一个变量已被声明,但未被赋值,那么它的值就是
undefined
:
1 2 3 4 5 6 7 |
let age; alert(age); // 弹出 "undefined" let age = 100; // 将值修改为 undefined age = undefined; alert(age); // "undefined" |
-
object类型和symbol类型
- 其他数据类型都被称为”原始类型“,因为它们的值只包含一个单独的内容(字符串、数字或其他)。object则用于存储数据集合和更复杂的实体。
- symbol类型用于创建对象的唯一标识符。
-
typeof运算符
- 返回参数的类型。
- 作为运算符:
typeof x
- 函数形式:
typeof(x)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
typeof undefined // "undefined" typeof 0 // "number" typeof 10n // "bigint" typeof true // "boolean" typeof "foo" // "string" typeof Symbol("id") // "symbol" typeof Math // "object" (1) //这是官方承认的 typeof 的行为上的错误,这个问题来自于 JavaScript 语言的早期,并为了兼容性而保留了下来。 //null 绝对不是一个 object。null 有自己的类型,它是一个特殊值。 typeof null // "object" (2) typeof alert // "function" (3) |
alert
- 弹出的这个带有信息的小窗口被称为 模态窗。
- “modal” 意味着用户不能与页面的其他部分(例如点击其他按钮等)进行交互,直到他们处理完窗口。
1 |
alert("Hello"); |
prompt
- title:显示给用户的文本
- default:可选的第二个参数,指定 input 框的初始值。
- 将返回用户在
input
框内输入的文本,如果用户取消了输入,则返回null
1 2 3 |
result = prompt(title, [default]); let test = prompt("Test", ''); // <-- 用于 IE 浏览器 |
confirm
- 显示一个带有
question
以及确定和取消两个按钮的模态窗口。 - 点击确定返回
true
,点击取消返回false
。
1 2 3 4 |
result = confirm(question); let isBoss = confirm("Are you the ok?"); alert( isBoss ); // 如果“确定”按钮被按下,则显示 true |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Chromium:学习,框架,一09/02
- ♥ 【Javascript】应用一:图片,视频,编码相关04/29
- ♥ WebSocket协议相关学习一03/24
- ♥ Electron学习一04/03
- ♥ 【Javascript】对象构造05/20
- ♥ 【Javascript】回调,promise,promise链04/13