We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
之前一直以前弱类型和强类型的区别是定义的时候需不需要标注类型,直到我昨天查了一下定义,才发现我一直搞错了。
弱类型和强类型的区别是能不能隐式转换,弱类型可以,而强类型不行。
而我之前一直误解的区别,那是静态语言和动态语言的区别。
也就是说,我之前一直这么介绍 typescript 是错的
typescript 是强类型版的 JS
重新介绍一下: typescript 是静态类型版的 JS ,typescript 能进行静态类型检查,尽管最后还是会编译成动态的js。
搞清楚什么是弱类型,就好办了,弱类型其实就是能进行隐式转换。
隐式转换,这个我熟,下面,就好说说,JS都能进行哪些隐式转换。
在强类型语言中,字符串只能和字符串相加进行拼接,但在弱类型中,弱化了这些类型,任意的类型都可以进行加号操作,不满足的类型会自动转换。
加号被赋予两种定义,一种是加法,一种是字符串拼接。
如果加号两边都是数字时,会进行加法运算
如果加号两边有一边是字符串,则会进行字符串拼接,不满足字符串类型的变量会被强制转换成字符串
隐式转换的情况十分多且复杂,我们只讨论了 数字和字符串的情况,而且平时也只用这两种,因为正常情况应该不会有人拿个对象或数组去进行加法运算吧。
另外还有一个小技巧,就是在一个变量前面加上一个正号,那这个变量就会被转成数字类型
let a = '1' let b =+a // 1
同理,你也可以写两个负号,因为负负得正。不过要写括号,因为 -- 被会当成自减1.
let a = '1' let b = -(-a) // 1 let c = --a // 0
四则运算中,除了 + 号可能是字符串拼接,其它皆为四则运算,会被强转为数字类型
!在 boolean 运算中就是取反操作
!
如果对非 boolean 使用,则会隐式转为 boolean 类型,再进行一次取反。
所以 !! 操作能把一个变量转为 boolean 值,因为 取反再取反,负负得正。
!!
let a = 0 let b = !!a // false let c = '' let d = !!c // false
if 表达式中,因为里面的表达式要接受一个 boolean ,所以,如果表达式不是boolean ,也会进行隐式转换
ps: 这些其实都是我在 《你不知道的JS(中卷)》中学到的,这真的是一本好书,如果没看过的话,可以去看看。
这系列书,是真的好看。我只有下卷没看,当时我买的时候,下卷的中文还没有汉化版,后来想补的时候,看了目录,发现下卷主要讲es6的内容,不太想看,就没补了。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
之前一直以前弱类型和强类型的区别是定义的时候需不需要标注类型,直到我昨天查了一下定义,才发现我一直搞错了。
弱类型和强类型的区别是能不能隐式转换,弱类型可以,而强类型不行。
而我之前一直误解的区别,那是静态语言和动态语言的区别。
也就是说,我之前一直这么介绍 typescript 是错的
typescript 是强类型版的 JS重新介绍一下:
typescript 是静态类型版的 JS ,typescript 能进行静态类型检查,尽管最后还是会编译成动态的js。
JS 的弱类型,弱在哪里
搞清楚什么是弱类型,就好办了,弱类型其实就是能进行隐式转换。
隐式转换,这个我熟,下面,就好说说,JS都能进行哪些隐式转换。
+ 号的隐式转换
在强类型语言中,字符串只能和字符串相加进行拼接,但在弱类型中,弱化了这些类型,任意的类型都可以进行加号操作,不满足的类型会自动转换。
加号被赋予两种定义,一种是加法,一种是字符串拼接。
如果加号两边都是数字时,会进行加法运算
如果加号两边有一边是字符串,则会进行字符串拼接,不满足字符串类型的变量会被强制转换成字符串
隐式转换的情况十分多且复杂,我们只讨论了 数字和字符串的情况,而且平时也只用这两种,因为正常情况应该不会有人拿个对象或数组去进行加法运算吧。
另外还有一个小技巧,就是在一个变量前面加上一个正号,那这个变量就会被转成数字类型
同理,你也可以写两个负号,因为负负得正。不过要写括号,因为 -- 被会当成自减1.
-*/运算
四则运算中,除了 + 号可能是字符串拼接,其它皆为四则运算,会被强转为数字类型
非运算
!
在 boolean 运算中就是取反操作如果对非 boolean 使用,则会隐式转为 boolean 类型,再进行一次取反。
所以
!!
操作能把一个变量转为 boolean 值,因为 取反再取反,负负得正。if 表达式
if 表达式中,因为里面的表达式要接受一个 boolean ,所以,如果表达式不是boolean ,也会进行隐式转换
ps: 这些其实都是我在 《你不知道的JS(中卷)》中学到的,这真的是一本好书,如果没看过的话,可以去看看。
这系列书,是真的好看。我只有下卷没看,当时我买的时候,下卷的中文还没有汉化版,后来想补的时候,看了目录,发现下卷主要讲es6的内容,不太想看,就没补了。
The text was updated successfully, but these errors were encountered: