Javscript中Object的Key

先来看一段代码: <div id="e1"></div> <div id="e2"></div> <script> var c1 = document.getElementById("e1"); var c2 = document.getElementById("e2"); var obj = {}; obj[c1] = 1; obj[c2] = 2; console.log(obj); </script> 上面这段代码会输出什么结果呢?答案是: Object {[object HTMLDivElement]: 2} 为什么给了 obj 两个元素,输出出来却变成了一个呢?难道 c1 和 c2 指向同一个元素?首先 c1 和 c2 是两个不同的 dom 节点,并且通过输出c1 === c2会发现结果为 false,而输出obj[c1] === obj[c2]的结果却为 true。通过上面结果可以初步推断,c1 和 c2 作为 object 的 key 时,值可能是一样的。object 的 key 所接受的值只有 string 一种,所以当 c1 这个 dom 元素作为 key 时,会被转换为 string 类型,而 c2 和 c1 由于都是 div,所以转换成 string 后,值都是一样的,c2 作为 key 也会覆盖 c1。导致出现只有一个元素的结果。如果 c2 元素变成其他类型的 dom 节点,转换为 string 类型时就会不一样,例如将 c2 改为 ul,还是上面的 js 代码,输出结果为: ...

一月 8, 2014 · 1 分钟 · Zhiya

不要将LiteIDE的项目文件夹命名为go

在 LiteIDE 中编写 Go 语言程序中,使用 Ctrl+R 编译运行,Console 中每次都输出一样的内容,即使代码改了,也还是最初代码的内容,也就是说新的代码压根没有被编译。 一开始怀疑是 LiteIDE 的问题,于是重启 LiteIDE 甚至是重启系统,不过重启后问题依旧。在其他位置新建项目后,能够正常编译执行,而当我把在其他地方创建的源文件拷贝到之前项目位置后,又出现了不能编译的问题。 于是到项目文件夹里找问题,猛然发现编译出的可执行文件名竟然是 go.exe!原来这就是问题所在。 解决问题之前首先需要了解一下 LiteIDE 在编译执行过程中做了什么。 第一步:调用go build编译源文件,并以项目名称为可执行文件名称输出 第二步:执行输出的可执行文件 问题主要出在 LiteIDE 将编译的可执行文件和项目文件夹同名,而我之前所建立的项目文件夹的名字刚好是go,当文件第二次编译时,LiteIDE 调用的 go 程序实际上就成了刚才编译出的程序,导致即使代码改变,程序也还是根据最早的代码编译出来的。 既然问题找到了,那么下面说说解决方法: LiteIDE 应该通过完整路径调用go build命令,例如C:/go/bin/go.exe build LiteIDE 应该在编译之前删除之前编译好的文件 不要将项目文件夹命名为go 前面两项都是 LiteIDE 层面的改进方法,而最后一项是在 LiteIDE 改进之前避免这种问题的方法。

十月 30, 2013 · 1 分钟 · Zhiya

破解Google Doodle小游戏

今天貌似是 Google 十五周年纪念日,照例他们在首页上挂了一个 JS 小游戏,用棒子打一个五角星(十次机会),时机控制的好的话,会掉下糖果。各种刷分之后,最高分停留在了 173 分。 本以为这是一个很高的分数了,可上微博一查竟然有不少 180 分以上的,并且 180 分以上有彩蛋,这不能忍,于是又是一通刷,不过一直没能达到 173 以上。 无奈之下,想从程序上下手。既然是 JS 游戏,理论上只要修改可以打的次数,就能提高分数。 去 Google 首页找 JS 文件,很容易发现一个https://www.google.com.hk/logos/2013/bday13/bday13.js文件,在这里查找数字 10,可以发现很多搜索结果,经过直觉判断,感觉bd=10这个赋值比较可疑,于是改之。刷新,成功! 下面是改为 99 次之后的分数:

九月 27, 2013 · 1 分钟 · Zhiya

升级到Flex SDK 4.9.1后无法找到基类BitmapAsset的问题

一个使用 flex sdk 编译的项目在升级 sdk 到 4.9.1 后出现了如下错误: errors: 1017: The definition of base class BitmapAsset was not found. google 后发现也有人遇到了这样的问题,详见:http://mail-archives.apache.org/mod_mbox/flex-dev/201303.mbox/%3CCD596C86.4E4D3%[email protected]%3E flex sdk 4.9 中的 core.swc 的体积比 4.8 中 core.swc 的体积小了大概 1/2,估计部分基类被从 core.swc 中移了出来,导致找不到 BitmapAsset。 解决办法是,在项目上单击右键——属性——Actionscript 构建路径——添加 SWC,定位到 sdk 安装路径下的 framework/libs 文件夹下,选择 framework.swc。 如果展开 framework.swc 包,可以看到 BitmapAsset 类,所以将其添加到构建路径中,就可以解决找不到基类的问题。

八月 27, 2013 · 1 分钟 · Zhiya

在Linux上搭建Actionscript开发环境

Actionscript 的开发通常使用 Flash Pro 和 Flash Builder 完成,但这两款软件都没有 Linux 版本,在 Linux 下我们可以自己手动搭建一个 Actionscript 的开发环境。 Actionscript 的开发环境主要有三个方面,分别是 IDE、SDK 和 Flash Player Debugger。 IDE Adobe 为 Actionscript 的开发专门提供了 Flash Builder,Flash Builder 是基于 Eclipse 开发的,而 Eclipse 提供了 Linux 版本,所以我们只要在 Eclipse 上安装 Actionscript 插件就可以在 Linux 上实现 Flash Builder 的功能。 首先在 Eclipse 官网下载 Eclipse IDE,目前的最新版为 4.3。安装过程不再赘述。Eclipse 的运行需要 Java 环境,没有预装 Java 的 Linux 发行版用户可以访问 Oracle 网站下载对应安装包。 Eclipse 安装完成后,就要安装 Flash Builder 的插件了,官方没有为 Linux 提供插件,所以我们使用一个名为 fb4linux 的开源 Flash Builder 4.5 的 Lniux 插件,项目地址:http://code.google.com/p/fb4linux/。访问该地址下载 FB4.5ForLinuxaa 和 FB4.5ForLinuxab 两个安装包。下载完成后使用命令cat FB45ForLinux* >FB45ForLinux.tar.bz2将两个包和成为一个压缩包,并将其解压。 接下来在 Eclipse 中安装 FB45ForLinux 插件,在 Eclipse 中选择 Help->Install New Software,点击 Add,在弹出窗口中选择 Local,定位到 FB45Forinux.tar.bz2 解压后的目录后,点击 OK,此时列表中并没有出现可以安装的插件,将 Group items by category 选项去掉,即可显示出可安装的软件。全选所有可安装的项目,点击 Next 进行安装。 插件安装完成后,IDE 部分的配置就结束了。接下来是 SDK 的安装。 ...

八月 4, 2013 · 2 分钟 · Zhiya