javascript
js return的值取不到_【JS基础】隐式转换(一)
開篇
JS作為一門動態語言十分靈活,但是伴隨而來的弱類型隱式轉化的問題讓我們十分頭疼。隱式作為一個大課題,很難用一個很簡短的篇幅把JS的隱式轉換講解的十分清楚。所以我選擇用多次少量的策略進行梳理,爭取讓你每看完一篇都會有加深對于JS隱式轉換的理解。
一元操作符
說到隱式轉換,就不得不提操作符了,絕大多數的隱式轉換都與操作符有關。我們就從最簡單的一元操作符開始我們的隱式轉換探索之旅吧! gogogo!
先來一串+ 操作符的基礎實踐:
let n = 1 let s1 = '2' let s2 = 'z' let o = {valueOf: function() {return -1} }n = +n // 值不變 s1 = +s1 // 值變為 2 s2 = +s2 // 值變為 NaN o = +o // 值變為 -1由上面的代碼可以看到,使用+操作符后,使用效果會像Number()轉型函數一元進行解析。
而Number()的轉化規則就是一元操作符隱式轉化的精髓所在。
(開始劃重點!
Number()的轉化規則如下:
- 數字不變
- true和false分別轉化為0和1
- null返回0
- undefined返回NaN
- string比較復雜
- 如果為空,則返回0
- 如果是數字(包括整型,浮點數,十六進制),則忽略前導0轉化為對應十進制數字
- 如果非上述格式,則返回NaN
- 如果是對象,則首先調用valueOf方法,然后按照前面的規則轉換,如轉換結果還是對象(非原始值),則再調用對象的toString方法。
既然我們知道了+的轉換規則,那么可以拓展來驗證一下上面的規則,我們這里主要對于對象進行探究
PS: 沒有記住規則不要緊,可以按照上面的規則走,多來幾次就明白了~let o1 = {valueOf: function() {console.log('執行valueOf')return 'a'},toString: function() {console.log('執行toString')return -1} }o1 = +o1 // 執行valueof NaNlet o2 = {valueOf: function() {console.log('執行valueOf')return {}},toString: function() {console.log('執行toString')return -1} }o2 = +o2 // 執行valueof 執行toString -1let o3 = {valueOf: function() {console.log('執行valueOf')return []},toString: function() {console.log('執行toString')return -1} }o3 = +o3 // 執行valueof 執行toString -1let o4 = {valueOf: function() {console.log('執行valueOf')return function () {}},toString: function() {console.log('執行toString')return -1} }o4 = +o4 // 執行valueof 執行toString -1let o5 = [] o5 = +o5 // 0let o6 = function() {} o6 = +o6 // NaN關于最后的o5,o6的結果我們要解釋一下。不要忘記Array和Function也是對象哦,所以他們的執行順序應該是下面這樣的。
+o5 Array的執行順序:
+o6 Function的執行順序:
同樣的,-作為一個二元操作符也是與上面的執行類似,不過要注意-是會取負的哦~
總結
今天我們學習到了一元運算符帶來的隱式轉換,主要要記得
- Number()的轉換規則(尤其是對象)
今日習題:
{}+[]在Chrome控制臺打出的結果是?
小提示:Chrome控制臺中前面的{}會被當成空代碼塊哦作者想說的
- 希望大家看了可以提一些建議~ 嘿嘿嘿
- MacbookPro任務進度(2/2)
- 配圖是女朋友拍的
- 轉載請注明出處,告訴我一下我會很開心~
今天總算是開了一個隱式轉換類型的頭哈哈哈 ,當然寫這方面也是因為自己想要更加深入的了解JavaScript??赡芎芏嗳藭X得這種情況我要知道干嘛,業務里面又用不到。
之前的我也這么想過。
但是,我逐漸發現,深入了解語言的特性,可以讓自己對于代碼的掌控能力越強,出現的BUG也越少,就算出現BUG了定位的效率也越來越高。其中滋味只能自己體會啦~(當然,寫之前一定一定要自己梳理清楚整體邏輯和細節,尤其是復雜且緊急的需求,否則你就會留下深深的大坑。
高能預警
下篇不出意外的話應該還是隱式轉換(畢竟是個大課題啊哈哈哈) 透露幾個下期的關鍵詞
關鍵字:原始值、valueOf、toPrimitive、==
下期更精彩哦~
總結
以上是生活随笔為你收集整理的js return的值取不到_【JS基础】隐式转换(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vscode修改python终端_pan
- 下一篇: 设置springboot日志级别_Spr