Comments (59)
谢谢。
可能我们的重点不同吧,至于压缩工具的实现,这似乎有点 "偏题" 了,反正我是这么认为的~
from underscore-analysis.
0.._比void 0更短
from underscore-analysis.
@lcoder 后面还跟了个 _
,意思就是 0['_']
from underscore-analysis.
@Sy-52 .....这个不是理所应当。。。按照其他java c++的语言规范,undefined 应该改是 语言保留字,但是不幸的js 丢下了这么坑,undefined可以声明为变量的,如果它能为变量时,你就不清楚 到底是变量还是 undefined.....
if(xxx ==undefined) 他是比对 变量还是 比对 js的本身的数据类型undefined 勒?。。。
from underscore-analysis.
不小心走进了楼主的博客,我很欣赏楼主对于库的解读和学习。我自己也在学习和使用过程中。这篇文章显得有些虎头蛇尾了,较大的篇幅解读了undefined是可以被重写,但是对于为什么能减少字节,压缩工具的实现,居然一句话带过了,这样显得结尾有些草率和仓促了,继续努力
from underscore-analysis.
@Sy-52 我觉得你有点钻牛角尖了,私以为 get 到「undefined 在低版本 IE 下能被改写所以采用 void 0 代替」这点就可以了,这也是我的初衷,毕竟 IE8 也即将退出历史舞台。当然,实际开发中,一般不会用 undefined 去做变量名,但是这和知道本文中心点不冲突。
from underscore-analysis.
建议楼主简练下语言,删掉「说来惭愧...」等。这样子读起文章来会更专注
from underscore-analysis.
蛮好,加油
from underscore-analysis.
已关注,加油po主
from underscore-analysis.
@juemin90 多谢支持!
from underscore-analysis.
长见识了,谢谢楼主
from underscore-analysis.
@jiapeiyang 感谢支持~
from underscore-analysis.
支持支持!最近在读underscore源码,楼主的注释版读起来很棒!
from underscore-analysis.
@Wangbaogang thanks a lot!
from underscore-analysis.
lz棒棒哒
from underscore-analysis.
写的不错
from underscore-analysis.
这个系列,我看定了
from underscore-analysis.
已start,楼主加油!!!
from underscore-analysis.
已start,楼主加油!!!
from underscore-analysis.
已start,楼主加油!!!
from underscore-analysis.
你不知道的js中卷,2.4.2也谈到了void 0
同时举的例子我觉得不太好。
from underscore-analysis.
@waitinghope 谢谢指出。没看过「你不知道的js」,不介意的话举个更好的例子?我可以补充或者修改下
from underscore-analysis.
@hanzichi 给你的outlook发了封信.
from underscore-analysis.
@waitinghope 看完了,其实他的意思就是「void + 任何数字」返回的都是 undefined。如果在一个函数中又要执行一个定时器,又要 return,写成 return void setTimeout(...) 的形式,不失为一种 hack
https://book.douban.com/review/8163708/ 他说的不对吧,如果 App.ready 了,那么就会返回 result 值了,如果 !App.ready ,那么返回的是 undefined
from underscore-analysis.
我觉得他的意思是:var t; 然后return t;
这个时候if(t)是判断不出来啥的.
from underscore-analysis.
@waitinghope 理解有出入吧 ...
from underscore-analysis.
来看看分析的,还是赞下。
from underscore-analysis.
0.0 重点是写出来了,但是 感觉好头重尾轻。。。不过还是 理解。。!!!点个赞赞!!!!
from underscore-analysis.
看出分析很用心,值得学习。
from underscore-analysis.
楼主你好,首先向你的分享行为与辛勤劳作表示敬意。
我在读完本文后发现其中一点写的有点问题,在此提出,如果理解的有问题,希望楼主赐教。
(function() {
var undefined = 10;// 10 -- chrome
alert(undefined);
})();
第一,这一句中undefined在其中起的是变量标识符的作用,我觉得这种情况下说 ' 用void 0 替代undefined去做变量名更好"没有任何意义。
第二、我感觉楼主文章中,这段想表达的意思是这种情况是个Bug,但我认为这种情况是标识符解析的规则导致。如果你想在函数作用域中正确返回undefined的话,避免使用undefined做变量标识符不是更好?或者你也可以返回window.undefined。
from underscore-analysis.
@Sy-52 因为你知道 避免使用 undefined,但是别人可能不知道(虽然我们一般不会这么做),但是确实在低版本 IE 下 undefined 能被作为变量标识符而被重写但不报错
from underscore-analysis.
@hanzichi 看了你的回答,又梳理了一下逻辑。
我认为var undefined = 10;
这条语句意在创建一个语义为'未定义'的变量,给它赋值整数10,此时alert(undefined);
弹出undefined变量的值10不是理所应当的事吗?在此种情况下,你不会想返回的是系统属性undefined吧。所以我还是没搞懂你在这段到底想表达什么意思。
如果可能的话,希望楼主能提供一些在underscore.js中用void 0替代undefined的实际例子或能够指示一下例子所在的地方,thx。
from underscore-analysis.
@Sy-52 你说的这两行代码就已经是很好的例子了啊:
var undefined = 10;
// undefined -- chrome
// 10 -- IE 8
alert(undefined);
弹出undefined变量的值10不是理所应当的事吗?
理所应当?但是 chrome 弹出 undefined 啊?
from underscore-analysis.
@LastKing 多谢指教,对java等语言不是很熟悉,没研究过,很长姿势。对于你说的第二点:
if(xxx ==undefined) 他是比对 变量还是 比对 js的本身的数据类型undefined 勒?。。。
经我测试,xxx对比的是函数作用域中的变量undefined,这也符合标识符解析规则。
@hanzichi 又想了一下,我可能get到你的意思了。
(function() {
var undefined = 10;
// 10 -- chrome
alert(undefined);
})();
一、你的意思可能是:如果你想在函数作用域中返回或操作系统属性undefined,但如果你在函数作用域中定义有名为undefined变量,你就无法如愿,所以此时用void 0替代undefined更好:
(function() {
var undefined = 10;
alert(void 0);
})();
二、但在全局作用域中:
var undefined = 10;
// undefined -- chrome
// 10 -- IE 8
alert(undefined);
你本来在全局作用域中定义一个名为undefined的变量赋值为10,但在操作它时却被系统属性undefined覆盖,这个才是不符初衷吧,这里用void 0替换undefined没有意义。(另外我测试IE8下alert(undefined)显示为undefined)
综上,由于其他语言中undefined是保留字@LastKing,那么这里提示大家养成不使用undefined做变量名的习惯不是比用void 0替换undefined更好?(因为以后undefined可能会成为保留字)
from underscore-analysis.
@Sy-52 https://book.douban.com/subject/26606848/
最关键的是你的code运行在一个不知道undefined是不是真正的undefined的环境中。
这一点对于underscore特别重要。
举个类似的例子,你怎么确定自己拿到的$就是jQuery的$?如果不是,那你所有依赖$的code还能用吗?
from underscore-analysis.
@hanzichi ok,捋顺了,感谢你愿意花时间解惑 ^_^
from underscore-analysis.
@w-y 还真是,测了下 IE8 也没有问题,请教下这是什么原理?
from underscore-analysis.
@hanzichi 类似 这种 0['x'] 但0.x会语法错误 4个字符的话应该还有几种写法
from underscore-analysis.
@w-y 感谢,学习了~
from underscore-analysis.
@w-y 为什么我chrome测试:console.log( 0.. )
报错?
from underscore-analysis.
楼主分析的不错 学到新知识
from underscore-analysis.
谢谢楼主,正在研究中
from underscore-analysis.
~👍
from underscore-analysis.
我记得 lodash 里面是用 var undefined
来定义 undefined... 也是奇妙. 自己定义 undefined, 然后不 define 它... 于是就是 undefined.
from underscore-analysis.
非常感谢分享,正在看您的注释版的源码
from underscore-analysis.
写的很好
from underscore-analysis.
undefined不是js的保留关键字,所以undefined可以作为变量被赋值,至于为什么使用void 0 ,楼主的解析还是不错的
from underscore-analysis.
为什么不用 null 代替 void 0
from underscore-analysis.
@pq1949 null与undefined等价吗?
from underscore-analysis.
@delayk
null == undefined
null !== undefined
from underscore-analysis.
@blurhkh ==是做了隐式转换的, null === undefined的结果可是false哦
你可以看下underscore源码里用来判断undefined的地方都是用===而不是==
from underscore-analysis.
@delayk 嗯,我只是说null !== undefined
from underscore-analysis.
@blurhkh 好吧…那你应该回复 @pq1949 而不是回复我
from underscore-analysis.
看了楼主与大家的讨论很有收获,自己实际测试一下确实如此。在全局作用域中以widow的属性优先,局部作用域中可以实现定义变量。但并不如void 0 字符少 。
from underscore-analysis.
今天在看框架时刚好遇到这个,有收货,多谢!
from underscore-analysis.
好了好了,star了
from underscore-analysis.
let a = 1
void a+1//NaN
from underscore-analysis.
刚才去试了下在线 JS 压缩工具(基于 UglifyJS 3),发现
- true > !0
- false > !1
- null > null
- undefined > void 0
from underscore-analysis.
from underscore-analysis.
Related Issues (20)
- JavaScript 数组乱序 HOT 13
- 浅谈 underscore 内部方法 group 的设计原理 HOT 3
- 带注释的源码中var _ = function (obj) {....}中有个疑问 HOT 4
- 关于 bind 你可能需要了解的知识点以及使用场景 HOT 2
- bind 方法的兼容实现 HOT 1
- JavaScript 函数节流和函数去抖应用场景辨析 HOT 17
- underscore 函数去抖的实现 HOT 20
- underscore 函数节流的实现 HOT 8
- 从斐波那契数列求值优化谈 _.memoize 方法 HOT 6
- Function Functions 相关源码拾遗
- 浅谈 Web 中前后端模板引擎的使用 HOT 19
- Underscore _.template 方法使用详解 HOT 3
- Underscore 整体架构浅析 HOT 15
- 源码解读这半年 HOT 20
- 疑问:模块导出中,向后兼容老的require() API HOT 1
- 源码
- 打扰一下,有一个问题想咨询你一下 HOT 9
- 你好请教个问题 HOT 1
- 你好...在谷歌浏览器中运行`Object.prototype.toString().call(abb)`会报错 //var abb = true HOT 2
- 關於underscore源碼中提到了25個扩展方法之疑問? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from underscore-analysis.