JavaScript运算符以及JavaScript存在的问题
运算符 | 描述 |
---|---|
| 用于数值类型的时候,是加法;用于字符串和其它数据类型(包括字符串)的时候,将字符串和其它数据类型连接起来 |
- | 减法 |
* | 乘法 |
/ | 真除法 |
% | 取余 |
| 自增,前置 或者后置 |
– | 自减,前置–或者后置– |
= | 赋值运算符 |
== | 等于 |
=== | 绝对等于(值和类型均相等) |
!= | 不等于 |
!== | 不绝对等于(值和类型有一个不相等,或两个都不相等) |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
&& | 逻辑与 |
|| | 逻辑或 |
! | 逻辑非 |
?: | 条件表达式 |
可以将 ,-,*,/和=结合起来使用,形成复合赋值运算符。例如: a =1,n-=m;它们的含义是a = a 1和n = n - m.
JavaScript是动态,弱类型语言
JavaScript毫无疑问是动态语言,当你定义变量的时候,并没有声明变量的数据类型;另外值得关注的一点是JavaScript还是弱类型的语言,例如:
代码语言:javascript复制var str = "123"
var b = true
var num = 456
var res1 = str b //可以运算,结果是字符串123true
var res2 = str num //可以运算,结果是字符串123456
var res3 = b num //可以运算,结果是数值457
动态语言是极其灵活的,它能带来静态语言所没有的优势。但是JavaScript是动态语言的同时又是弱数据类型语言。这样就过于灵活了,对于工程而言是灾难性的。例如,我有两个变量a和b,他们之间进行加法运算,预期的结果是两个数值相加,得到一个数值类型。但是如果现在b变成了字符串形式的数字,那么将会导致最终的结果变为字符串类型,并且这样不会有任何报错。对于程序而言,这将是灾难性的错误。这将导致程序的结果是不可控的。
JavaScript的替代品?
JavaScript是前端的必需品,它是浏览器中运行的唯一语言。每一位前端开发者都需要使用它。但是JavaScript存在上面的问题,现在的方法是进行转译。转译就是采用另外一种语言编写代码,然后将其转换为JavaScript。但是这样,你还是无法避免使用JavaScript。
目前看来,TypeScript是取代JavaScript的一个更好的选择。TypeScript不是一种全新的语言,而是JavaScript的超集。TypeScript编译器可以将TypeScript代码编译为有效的JavaScript。
另外值得一提的是,随着WebAssembly被广泛采用,JavaScript是Web浏览器支持的唯一语言的情况可能发生变化。目前所有主流浏览器都支持WebAssembly,将来它很可能成为面向Web的语言的默认编译目标。目前的WebAssembly需要与JavaScript代码搭配运行,因为WebAssembly无法直接访问网页。这意味着如果不经过JavaScript层,WASM就无法操纵DOM或接收事件。
虽然Mozilla声称WebAssembly并不是用来代替JavaScript的。类似于支付宝不是用来替代钱包的。JavaScript当初并不是要取代嵌入浏览器的Java。Web应用程序并非旨在替代桌面应用。但一旦能做到这些,它们必然会走上那条路。例如今天我们能看到的各种各样的非原生应用取代原生应用。
对于写过多种语言的我而言,只是希望能够有一个较好的JavaScript替代品。解决JavaScript出现的问题。