TypeScript 这般代码,倒有些意思。想起从前那些个代码,不过是任由你胡乱写,运行结果如何,还得瞧天意。而今,这 TypeScript 倒是更像有了规矩,明文告示,若是错了,便不容你再行狡辩。
首先说这基础数据类型,大抵也不过如此——数字number
、字符string
、真假boolean
,这些都见过。只不过,这枚举enum
,却颇有些自负。定了个红绿蓝的名号,Red, Green, Blue,也不许你多改,只管按它的规矩办。至于什么null
、undefined
,是非之地,岂能让人放心?
// 周某人的第一行 TypeScript 代码
const hello : string = "Hello World!"
console.log(hello) // 输出 "Hello World!"
// number:双精度 64 位浮点值。它可以用来表示整数和浮点数。
const int:number = 1024
console.log(int) // 输出 1024
const float:number = 10.24
console.log(float) // 输出 10.24
// string:一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。
const str_1:string = '123'
const str_2:string = "456"
const str_3:string = `789`
console.log(str_1, str_2, str_3) // 输出 "123", "456", "789"
// boolean:表示逻辑值:true 和 false。
const flag: boolean = true
console.log(flag) // 输出 true
// enum:枚举类型用于定义数值集合。
enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
console.log(c); // 输出 2
上述代码体验链接: www.typescriptlang.org/zh/play
再看这变量声明,从前那‘任意写法’早已成为历史。如今,你得明确告诉它——‘这是个string
,那是个number
。你若不说,它也给你个undefined
。规矩虽严,倒也比从前井然有序。然则,终有些任性者,名为any
,生得桀骜,凡事皆可尝试,任意妄为,最后如何,却也难言。
var uname:string = "hello";
console.log(uname) // 输出 "hello"
// 声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined:
var value;
console.log(value) // 输出 undefined
上述代码体验链接:www.typescriptlang.org/zh/play
更妙的是这作用域,仿佛分得十分清楚。那些站在外面的,全局的,你无论走到哪里,总会遇见;可那些局部的,缩在一角,似乎非得凑近了才见。至于类里的变量,就更像是‘家法’——类中的静态者,任谁都能管;而那些实例变量,倒得等到生成了‘对象’才算真正活起来。
var global_num = 12 // 全局变量
class Numbers {
num_val = 13; // 实例变量
static sval = 10; // 静态变量
storeNum():void {
var local_num = 14; // 局部变量
}
}
console.log("全局变量为: "+global_num) // 12
console.log("静态变量为: "+Numbers.sval) // 10
var obj = new Numbers();
console.log("实例变量: "+obj.num_val) // 13
上述代码体验链接:www.typescriptlang.org/zh/play
如此,TypeScript不过是给了程序一副新衣裳,规矩更多,限制也多。但若真写得好,倒也如那Hello World
一般,行云流水,无甚阻碍。
敝人带各位看官再看看这 TypeScript 中的运算符:
算术运算符,这是最简单的东西,若是只停留在加减乘除这般浅显的表象上,倒也没什么深意。程序员们用 +
、-
、*
、/
这些符号来算计一堆数字,仿佛在追求什么数学的精确,实则不过是依着机器的运作罢了。且看那“自增”和“自减”,++
与--
,似乎要让程序自己学会进步和退让,倒显得有些虚伪。机器毕竟是死的,哪懂什么是进,什么是退?
var num1:number = 10
var num2:number = 2
var res:number = 0
res = num1 + num2
console.log("加:"+res); // 输出: "加:12"
res = num1 - num2;
console.log("减:"+res) // 输出: "减:8"
res = num1*num2
console.log("乘:"+res) // 输出: "乘:20"
res = num1/num2
console.log("除:"+res) // 输出: "除:5"
res = num1%num2
console.log("余数:"+res) // 输出: "余数:0"
num1++
console.log("num1 自增运算: "+num1) // 输出: "num1 自增运算: 11"
num2--
console.log("num2 自减运算: "+num2) // 输出: "num2 自减运算: 1"
至于关系运算符,看似在做比较,实则多半是空自猜度。你说==
是平等的,!=
是不平等的,可机器又如何真知这平等与否?它只管算着,>
、<
、>=
、<=
,数字在它眼里不过是大与小的标记。我们呢,不过是用这些标记来试图分辨世界的高低。
// ……
var res = num1>num2
console.log("num1 大于 num2: "+res)
逻辑运算符,大概是编程里最迷人的诡辩术。我们常常要用&&
和||
来判定某件事的真假,而这短路的逻辑,倒似乎是一种偷懒的捷径。比如&&
,非得左右都对了才算真,可这左右,是否真的都是对的?||
更是滑稽,只要有一方稍稍站住了脚,便可认为是全对。至于!
,那便是彻头彻尾的反叛,可这反叛,倒是合乎机器的道理。
// ……
var res:boolean = ((avg>50)&&(percentage>80));
console.log("(avg>50)&&(percentage>80): ",res);
赋值运算符,这是一种令人沉思的象征。=
看似简单,却几乎掌握了程序的生杀大权。你想要什么,就赋给它什么,+=
、-=
、*=
等,不过是表面上的操作,背后依然是服从与控制的关系。机器顺从地接受这些命令,仿佛并无怨言,然则我们呢?是否真的明白自己在给机器赋予什么?
// ……
a += b;
console.log("a+=b: "+a)
再说这三元运算符,也许是最为象征性的存在。看似在判定两个不同的选择,Test ? expr1 : expr2
,其实不过是在依赖一个简单的真假测试,来决定所谓的“命运”。这命运的真相,只在那瞬间的Test
里揭示,但人类的选择呢?是不是也如此简单粗暴?
// ……
var result = num > 0 ? "大于 0" : "小于 0,或等于 0";
最后,还有那字符串运算符和类型运算符。用 +
来连接两个字符串,仿佛两者真的可以如此轻易融合。而typeof
,则是那种让机器自知其身的尝试。我们问它,“你是什么类型?” 它只会回答一句简短的number
、string
或其他,这些答案终究也只是在分类,而分类并不意味着理解。
// ……
let num = 1024
console.log(typeof num); //输出结果: number
其实还有一种叫位运算,理解起来比较费脑,需要以机器的思维从 01 的角度去思考。
位运算,倒像极了从前乡下的‘老账’,账簿上那些细小的数字,一笔一划,代表着人情债务的来往。可如今这位运算,却将这些‘账簿’搬到了机器里头,只剩下0
和1
的世界,不问人情,不看情面,只看那微末的位上如何转动。
位运算之妙,正在于它‘偷工减料’的精确。你若问它‘与’(&
)是何物,它会告诉你:两个1
才是真,其他皆为假。这个规则简单得让人哭笑不得,仿佛两个人非得同时点头,方能作数;若有一人摇头,那便毫无结果。
let a = 5; // 0101
let b = 3; // 0011
console.log(a & b); // 输出1: 0001
至于‘或’(|
),倒是有些宽厚,只要有一个1
,便可认为是对的。这规则倒像是某些无关紧要的交情,只要有一个人在意,便能算作成立。它甚至不介意其他人如何,只要有一点希望,便可通融。
console.log(a | b); // 输出7: 0111
再说这‘异或’(^
),却颇有些桀骜的味道。它只认不相同的,若两个数一样,便视作无效。像极了某些不合群的性情,非要在差异中寻找意义。
console.log(a ^ b); // 输出6: 0110
‘取反’(~
)则是极端的反叛者,凡是1
,它便反成0
;凡是0
,它又偏要反成1
。这种彻底的对立,倒有几分像“愤怒的青年”,满怀否定,不愿服从任何现状。
console.log(~a); // 输出-6
最有趣的,便是这‘左移’(<<
)与‘右移’(>>
)。这二者像是时间的年轮,将所有的位数推向更高或更低的地方。你将数字往左一推,数字便瞬间翻倍,仿佛是从无到有的奇迹;而若向右移,则仿佛让时间倒流,数字随之削减,直至无影无踪。
console.log(a << 1); // 输出10: 1010
console.log(b >> 1); // 输出1: 0001
位运算,这般操作虽然精密,却充满了冷酷无情的机械性。它不懂得人的复杂情感,只管依照固定的规则运转。你说它强大也罢,简单也罢,终究不过是机器间的无声博弈。这些‘0’和‘1’,其实是现代人生活的缩影,彼此之间碰撞交织,却未曾真正懂得对方的意义。”
一言以蔽之,TypeScript里这些运算符,像极了我们对世界的操控欲,但却不曾真正理解背后的意义。我们操控了机器,而机器却也反映了我们的局限。
上述运算符完整代码体验链接:www.typescriptlang.org/zh/play
参考资料
以上文字内容几乎全部由 ChatGPT 编写创作
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。