原始数据类型
JavaScript 的类型分为两种:原始数据类型(Primitive
data types)和对象类型(Object types)。
原始数据类型包括:布尔值、数值、字符串、null、undefined
以及 ES6 中的新类型 Symbol 和
ES10 中的新类型 BigInt。
本节主要介绍前五种原始数据类型在 TypeScript
中的应用。
布尔值
布尔值是最基础的数据类型,在 TypeScript 中,使用 boolean
定义布尔值类型:
1234let isDone: boolean = false;// 编译通过// 后面约定,未强调编译错误的代码片段,默认为编译通过
注意,使用构造函数 Boolean
创造的对象不是布尔值:
1234let createdByNewBoolean: boolean = new Boolean(1);// Type 'Boolean' is not assignable to type 'boolean'.// 'boolean' is a primit ...
Hello TypeScript
我们从一个简单的例子开始。
将以下代码复制到 hello.ts 中:
123456function sayHello(person: string) { return 'Hello, ' + person;}let user = 'Tom';console.log(sayHello(user));
然后执行
1tsc hello.ts
这时候会生成一个编译好的文件 hello.js:
12345function sayHello(person) { return 'Hello, ' + person;}var user = 'Tom';console.log(sayHello(user));
在 TypeScript 中,我们使用 :
指定变量的类型,: 的前后有没有空格都可以。
上述例子中,我们用 : 指定 person 参数类型为
string。但是编译为 js
之后,并没有什么检查的代码被插入进来。
这是因为 ...
安装 TypeScript
TypeScript 的命令行工具安装方法如下:
1npm install -g typescript
以上命令会在全局环境下安装 tsc
命令,安装完成之后,我们就可以在任何地方执行 tsc
命令了。
编译一个 TypeScript 文件很简单:
1tsc hello.ts
我们约定使用 TypeScript 编写的文件以 .ts 为后缀,用
TypeScript 编写 React 时,以 .tsx 为后缀。
编辑器
TypeScript 最大的优势之一便是增强了编辑器和 IDE
的功能,包括代码补全、接口提示、跳转到定义、重构等。
主流的编辑器都支持 TypeScript,这里我推荐使用 Visual Studio Code。
它是一款开源,跨终端的轻量级编辑器,内置了对 TypeScript 的支持。
另外它本身也是用
TypeScript 编写的。
下载安装:https://code.visualstudio.com/
获取其他编辑器或 IDE 对 TypeScript 的支持:
Sublime
Text
WebStorm
Vim
Emacs
...
什么是 TypeScript
Typed JavaScript at Any Scale.
添加了类型系统的 JavaScript,适用于任何规模的项目。
以上描述是官网[1]对于 TypeScript 的定义。
它强调了 TypeScript
的两个最重要的特性——类型系统、适用于任何规模。
TypeScript 的特性
类型系统
从 TypeScript 的名字就可以看出来,「类型」是其最核心的特性。
我们知道,JavaScript 是一门非常灵活的编程语言:
它没有类型约束,一个变量可能初始化时是字符串,过一会儿又被赋值为数字。
由于隐式类型转换的存在,有的变量的类型很难在运行前就确定。
基于原型的面向对象编程,使得原型上的属性或方法可以在运行时被修改。
函数是 JavaScript 中的一等公民[2],可以赋值给变量,也可以当作参数或返回值。
这种灵活性就像一把双刃剑,一方面使得 JavaScript
蓬勃发展,无所不能,从 2013
年开始就一直蝉联最普遍使用的编程语言排行榜冠军[3];另一方面也使得它的代码质量参差不齐,维护成本高,运行时错误多。
而 TypeScr ...
JavaScript 语言的历史
诞生
JavaScript
因为互联网而生,紧跟着浏览器的出现而问世。回顾它的历史,就要从浏览器的历史讲起。
1990年底,欧洲核能研究组织(CERN)科学家 Tim
Berners-Lee,在全世界最大的电脑网络——互联网的基础上,发明了万维网(World
Wide
Web),从此可以在网上浏览网页文件。最早的网页只能在操作系统的终端里浏览,也就是说只能使用命令行操作,网页都是在字符窗口中显示,这当然非常不方便。
1992年底,美国国家超级电脑应用中心(NCSA)开始开发一个独立的浏览器,叫做
Mosaic。这是人类历史上第一个浏览器,从此网页可以在图形界面的窗口浏览。
1994年10月,NCSA 的一个主要程序员 Marc Andreessen 联合风险投资家 Jim
Clark,成立了 Mosaic 通信公司(Mosaic Communications),不久后改名为
Netscape。这家公司的方向,就是在 Mosaic
的基础上,开发面向普通用户的新一代的浏览器 Netscape Navigator。
1994年12月,Navigator 发 ...
导论
什么是 JavaScript 语言?
JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script
language),指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本”。
JavaScript
也是一种嵌入式(embedded)语言。它本身提供的核心语法不算很多,只能用来做一些数学和逻辑运算。JavaScript
本身不提供任何与 I/O(输入/输出)相关的
API,都要靠宿主环境(host)提供,所以 JavaScript
只合适嵌入更大型的应用程序环境,去调用宿主环境提供的底层 API。
目前,已经嵌入 JavaScript
的宿主环境有多种,最常见的环境就是浏览器,另外还有服务器环境,也就是
Node 项目。
从语法角度看,JavaScript
语言是一种“对象模型”语言。各种宿主环境通过这个模型,描述自己的功能和操作接口,从而通过
JavaScript 控制这些功能。但是,JavaScript
并不是纯粹的“面向对象语言”,还支持其他编程范式(比如函数式编程)。这导致几乎任何一个问题,JavaScript
都有多 ...
C 语言简介
历史
C 语言最初是作为 Unix 系统的开发工具而发明的。
1969年,美国贝尔实验室的肯·汤普森(Ken
Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix
是用汇编语言写的,无法移植到其他计算机,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在
BCPL 语言的基础上发明了 B 语言。
1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)又在 B
语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,所以称为 C
语言。
1973年,整个 Unix 系统都使用 C
语言重写。此后,这种语言开始快速流传,广泛用于各种操作系统和系统软件的开发。
1988年,美国国家标准协会(ANSI)正式将 C 语言标准化,标志着 C
语言开始稳定和规范化。
几十年后的今天,C
语言依然是最广泛使用、最流行的系统编程语言之一,Unix 和 Linux
系统现在还是使用 C 语言开发。
C 语言的特点
C 语言能够长盛不衰、广泛应用,主要原因是它有一些鲜明的特点。
(1)低级语 ...
read 命令
用法
有时,脚本需要在执行过程中,由用户提供一部分数据,这时可以使用read命令。它将用户的输入存入一个变量,方便后面的代码使用。用户按下回车键,就表示输入结束。
read命令的格式如下。
1read [-options] [variable...]
上面语法中,options是参数选项,variable是用来保存输入数值的一个或多个变量名。如果没有提供变量名,环境变量REPLY会包含用户输入的一整行数据。
下面是一个例子demo.sh。
12345#!/bin/bashecho -n "输入一些文本 > "read textecho "你的输入:$text"
上面例子中,先显示一行提示文本,然后会等待用户输入文本。用户输入的文本,存入变量text,在下一行显示出来。
123$ bash demo.sh输入一些文本 > 你好,世界你的输入:你好,世界
read可以接受用户输入的多个值。
1234#!/bin/bashecho Please, enter your firstname and lastnamerea ...
Bash 脚本入门
脚本(script)就是包含一系列命令的一个文本文件。Shell
读取这个文件,依次执行里面的所有命令,就好像这些命令直接输入到命令行一样。所有能够在命令行完成的任务,都能够用脚本完成。
脚本的好处是可以重复使用,也可以指定在特定场合自动调用,比如系统启动或关闭时自动执行脚本。
Shebang 行
脚本的第一行通常是指定解释器,即这个脚本必须通过什么解释器执行。这一行以#!字符开头,这个字符称为
Shebang,所以这一行就叫做 Shebang 行。
#!后面就是脚本解释器的位置,Bash
脚本的解释器一般是/bin/sh或/bin/bash。
123#!/bin/sh# 或者#!/bin/bash
#!与脚本解释器之间有没有空格,都是可以的。
如果 Bash
解释器不放在目录/bin,脚本就无法执行了。为了保险,可以写成下面这样。
1#!/usr/bin/env bash
上面命令使用env命令(这个命令总是在/usr/bin目录),返回
Bash 可执行文件的位置。env命令的详细介绍,请看后文。
Shebang
行不是必需的,但是建议加上这行。如果缺少该行 ...
目录堆栈
为了方便用户在不同目录之间切换,Bash 提供了目录堆栈功能。
cd -
Bash
可以记忆用户进入过的目录。默认情况下,只记忆前一次所在的目录,cd -命令可以返回前一次的目录。
12345# 当前目录是 /path/to/foo$ cd bar# 重新回到 /path/to/foo$ cd -
上面例子中,用户原来所在的目录是/path/to/foo,进入子目录bar以后,使用cd -可以回到原来的目录。
pushd,popd
如果希望记忆多重目录,可以使用pushd命令和popd命令。它们用来操作目录堆栈。
pushd命令的用法类似cd命令,可以进入指定的目录。
1$ pushd dirname
上面命令会进入目录dirname,并将该目录放入堆栈。
第一次使用pushd命令时,会将当前目录先放入堆栈,然后将所要进入的目录也放入堆栈,位置在前一个记录的上方。以后每次使用pushd命令,都会将所要进入的目录,放在堆栈的顶部。
popd命令不带有参数时,会移除堆栈的顶部记录,并进入新的堆栈顶部目录(即原来的第二条目录)。
下面是一个例子。
123456789101112 ...