Giter VIP home page Giter VIP logo

Comments (59)

lessfish avatar lessfish commented on August 19, 2024 20

谢谢。
可能我们的重点不同吧,至于压缩工具的实现,这似乎有点 "偏题" 了,反正我是这么认为的~

from underscore-analysis.

w-y avatar w-y commented on August 19, 2024 15

0.._比void 0更短

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024 8

@lcoder 后面还跟了个 _ ,意思就是 0['_']

from underscore-analysis.

LastKing avatar LastKing commented on August 19, 2024 7

@Sy-52 .....这个不是理所应当。。。按照其他java c++的语言规范,undefined 应该改是 语言保留字,但是不幸的js 丢下了这么坑,undefined可以声明为变量的,如果它能为变量时,你就不清楚 到底是变量还是 undefined.....
if(xxx ==undefined) 他是比对 变量还是 比对 js的本身的数据类型undefined 勒?。。。

from underscore-analysis.

itsmatthu avatar itsmatthu commented on August 19, 2024 5

不小心走进了楼主的博客,我很欣赏楼主对于库的解读和学习。我自己也在学习和使用过程中。这篇文章显得有些虎头蛇尾了,较大的篇幅解读了undefined是可以被重写,但是对于为什么能减少字节,压缩工具的实现,居然一句话带过了,这样显得结尾有些草率和仓促了,继续努力

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024 3

@Sy-52 我觉得你有点钻牛角尖了,私以为 get 到「undefined 在低版本 IE 下能被改写所以采用 void 0 代替」这点就可以了,这也是我的初衷,毕竟 IE8 也即将退出历史舞台。当然,实际开发中,一般不会用 undefined 去做变量名,但是这和知道本文中心点不冲突。

from underscore-analysis.

sighWang avatar sighWang commented on August 19, 2024 1

建议楼主简练下语言,删掉「说来惭愧...」等。这样子读起文章来会更专注

from underscore-analysis.

idda avatar idda commented on August 19, 2024

蛮好,加油

from underscore-analysis.

juemin90 avatar juemin90 commented on August 19, 2024

已关注,加油po主

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@juemin90 多谢支持!

from underscore-analysis.

jiapeiyang avatar jiapeiyang commented on August 19, 2024

长见识了,谢谢楼主

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@jiapeiyang 感谢支持~

from underscore-analysis.

Wangbaogang avatar Wangbaogang commented on August 19, 2024

支持支持!最近在读underscore源码,楼主的注释版读起来很棒!

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@Wangbaogang thanks a lot!

from underscore-analysis.

lcoder avatar lcoder commented on August 19, 2024

lz棒棒哒

from underscore-analysis.

git-lt avatar git-lt commented on August 19, 2024

写的不错

from underscore-analysis.

zhw2590582 avatar zhw2590582 commented on August 19, 2024

这个系列,我看定了

from underscore-analysis.

Melody12ab avatar Melody12ab commented on August 19, 2024

已start,楼主加油!!!

from underscore-analysis.

snayan avatar snayan commented on August 19, 2024

已start,楼主加油!!!

from underscore-analysis.

cleartime avatar cleartime commented on August 19, 2024

已start,楼主加油!!!

from underscore-analysis.

waitinghope avatar waitinghope commented on August 19, 2024

你不知道的js中卷,2.4.2也谈到了void 0
同时举的例子我觉得不太好。

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@waitinghope 谢谢指出。没看过「你不知道的js」,不介意的话举个更好的例子?我可以补充或者修改下

from underscore-analysis.

waitinghope avatar waitinghope commented on August 19, 2024

@hanzichi 给你的outlook发了封信.

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@waitinghope 看完了,其实他的意思就是「void + 任何数字」返回的都是 undefined。如果在一个函数中又要执行一个定时器,又要 return,写成 return void setTimeout(...) 的形式,不失为一种 hack

https://book.douban.com/review/8163708/ 他说的不对吧,如果 App.ready 了,那么就会返回 result 值了,如果 !App.ready ,那么返回的是 undefined

from underscore-analysis.

waitinghope avatar waitinghope commented on August 19, 2024

我觉得他的意思是:var t; 然后return t;
这个时候if(t)是判断不出来啥的.

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@waitinghope 理解有出入吧 ...

from underscore-analysis.

xyyie avatar xyyie commented on August 19, 2024

来看看分析的,还是赞下。

from underscore-analysis.

LastKing avatar LastKing commented on August 19, 2024

0.0 重点是写出来了,但是 感觉好头重尾轻。。。不过还是 理解。。!!点个赞赞!

from underscore-analysis.

MontageD avatar MontageD commented on August 19, 2024

看出分析很用心,值得学习。

from underscore-analysis.

Sy-52 avatar Sy-52 commented on August 19, 2024

楼主你好,首先向你的分享行为与辛勤劳作表示敬意。
我在读完本文后发现其中一点写的有点问题,在此提出,如果理解的有问题,希望楼主赐教。

(function() {
var undefined = 10;

// 10 -- chrome
alert(undefined);
})();

第一,这一句中undefined在其中起的是变量标识符的作用,我觉得这种情况下说 ' 用void 0 替代undefined去做变量名更好"没有任何意义。
第二、我感觉楼主文章中,这段想表达的意思是这种情况是个Bug,但我认为这种情况是标识符解析的规则导致。如果你想在函数作用域中正确返回undefined的话,避免使用undefined做变量标识符不是更好?或者你也可以返回window.undefined。

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@Sy-52 因为你知道 避免使用 undefined,但是别人可能不知道(虽然我们一般不会这么做),但是确实在低版本 IE 下 undefined 能被作为变量标识符而被重写但不报错

from underscore-analysis.

Sy-52 avatar Sy-52 commented on August 19, 2024

@hanzichi 看了你的回答,又梳理了一下逻辑。
我认为var undefined = 10;这条语句意在创建一个语义为'未定义'的变量,给它赋值整数10,此时alert(undefined);弹出undefined变量的值10不是理所应当的事吗?在此种情况下,你不会想返回的是系统属性undefined吧。所以我还是没搞懂你在这段到底想表达什么意思。
如果可能的话,希望楼主能提供一些在underscore.js中用void 0替代undefined的实际例子或能够指示一下例子所在的地方,thx。

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@Sy-52 你说的这两行代码就已经是很好的例子了啊:

var undefined = 10;

// undefined -- chrome
// 10 -- IE 8
alert(undefined);

弹出undefined变量的值10不是理所应当的事吗?

理所应当?但是 chrome 弹出 undefined 啊?

from underscore-analysis.

Sy-52 avatar Sy-52 commented on August 19, 2024

@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.

waitinghope avatar waitinghope commented on August 19, 2024

@Sy-52 https://book.douban.com/subject/26606848/
最关键的是你的code运行在一个不知道undefined是不是真正的undefined的环境中。
这一点对于underscore特别重要。
举个类似的例子,你怎么确定自己拿到的$就是jQuery的$?如果不是,那你所有依赖$的code还能用吗?

from underscore-analysis.

Sy-52 avatar Sy-52 commented on August 19, 2024

@hanzichi ok,捋顺了,感谢你愿意花时间解惑 ^_^

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@w-y 还真是,测了下 IE8 也没有问题,请教下这是什么原理?

from underscore-analysis.

w-y avatar w-y commented on August 19, 2024

@hanzichi 类似 这种 0['x'] 但0.x会语法错误 4个字符的话应该还有几种写法

from underscore-analysis.

lessfish avatar lessfish commented on August 19, 2024

@w-y 感谢,学习了~

from underscore-analysis.

lcoder avatar lcoder commented on August 19, 2024

@w-y 为什么我chrome测试:console.log( 0.. ) 报错?

from underscore-analysis.

195286381 avatar 195286381 commented on August 19, 2024

楼主分析的不错 学到新知识

from underscore-analysis.

pageliu16 avatar pageliu16 commented on August 19, 2024

谢谢楼主,正在研究中

from underscore-analysis.

wave1992 avatar wave1992 commented on August 19, 2024

~👍

from underscore-analysis.

district10 avatar district10 commented on August 19, 2024

我记得 lodash 里面是用 var undefined 来定义 undefined... 也是奇妙. 自己定义 undefined, 然后不 define 它... 于是就是 undefined.

from underscore-analysis.

WalkerKing avatar WalkerKing commented on August 19, 2024

非常感谢分享,正在看您的注释版的源码

from underscore-analysis.

fxk01 avatar fxk01 commented on August 19, 2024

写的很好

from underscore-analysis.

shangguanhonglei avatar shangguanhonglei commented on August 19, 2024

undefined不是js的保留关键字,所以undefined可以作为变量被赋值,至于为什么使用void 0 ,楼主的解析还是不错的

from underscore-analysis.

pq1949 avatar pq1949 commented on August 19, 2024

为什么不用 null 代替 void 0

from underscore-analysis.

delayk avatar delayk commented on August 19, 2024

@pq1949 null与undefined等价吗?

from underscore-analysis.

eventhorizon-cli avatar eventhorizon-cli commented on August 19, 2024

@delayk
null == undefined
null !== undefined

from underscore-analysis.

delayk avatar delayk commented on August 19, 2024

@blurhkh ==是做了隐式转换的, null === undefined的结果可是false哦
你可以看下underscore源码里用来判断undefined的地方都是用===而不是==

from underscore-analysis.

eventhorizon-cli avatar eventhorizon-cli commented on August 19, 2024

@delayk 嗯,我只是说null !== undefined

from underscore-analysis.

delayk avatar delayk commented on August 19, 2024

@blurhkh 好吧…那你应该回复 @pq1949 而不是回复我

from underscore-analysis.

attraction11 avatar attraction11 commented on August 19, 2024

看了楼主与大家的讨论很有收获,自己实际测试一下确实如此。在全局作用域中以widow的属性优先,局部作用域中可以实现定义变量。但并不如void 0 字符少 。

from underscore-analysis.

pluscai avatar pluscai commented on August 19, 2024

今天在看框架时刚好遇到这个,有收货,多谢!

from underscore-analysis.

wshuhd avatar wshuhd commented on August 19, 2024

好了好了,star了

from underscore-analysis.

HomyeeKing avatar HomyeeKing commented on August 19, 2024

let a = 1
void a+1//NaN

from underscore-analysis.

MBRjun avatar MBRjun commented on August 19, 2024

刚才去试了下在线 JS 压缩工具(基于 UglifyJS 3),发现

  • true > !0
  • false > !1
  • null > null
  • undefined > void 0

from underscore-analysis.

xr-betty avatar xr-betty commented on August 19, 2024

from underscore-analysis.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.