前言

前面已經瞭解了使用內建函數建構子的某些危險地方,但其實陣列與for in,也是有一些危險的地方。

陣列與for in

在前面幾個章節有講過陣列就是物件,所以我們一樣可以使用 for in來做處理。

1
2
3
4
5
var arr = ['John', 'Jane', 'Jim'];

for (var prop in arr) {
console.log(prop + ': ' + arr[prop]);
}

JavaScript 的陣列與其他程式語言有點不太一樣,prop 其實是名稱而 arr[prop] 是值的配對,而這就像名稱/值的配對,所以我們可以透過中括號取的,有點模糊吧,試著寫出物件會比較清楚。

1
2
3
4
5
6
7
var obj = {
0: 'John',
1: 'Jane',
2: 'Jim',
} obj[0];

而這代表著有一些問題,課堂上是著在原型上加入一個原型。

1
2
3大专栏  [JS奇怪的世界]No.55 危險小叮嚀:陣列與for in>
4
5
6
7
Array.prototype.myCustomFeature = 'cool!';

var arr = ['John', 'Jane', 'Jim'];

for (var prop in arr) {
console.log(prop + ': ' + arr[prop]);
}

我們可以看到剛剛加入至原型中的東西被跟著輸出了,原因是 var arr = ['John', 'Jane', 'Jim']; 這一段實體語法是在呼叫 new Array,所以在某些情況下不要對陣列使用 for in,而是使用 for

1
2
3
4
5
6
7
Array.prototype.myCustomFeature = 'cool!';

var arr = ['John', 'Jane', 'Jim'];

for (var i = 0; i < arr.length; i++) {
console.log(i + ': ' + arr[i]);
}

所以一般來講都會避免再 JavaScript 中使用 for in,因為陣列就是物件。

圖源

JavaScript 全攻略:克服 JS 奇怪的部分

最新文章

  1. Intel Edison
  2. Java基础知识强化07:打印出空心菱形
  3. Thread.sleep(0)的意义
  4. 在 IIS 上创建 FTP 站点
  5. android 登录界面
  6. (10.20)Java小作业!
  7. github SSH配置
  8. OpenGL——外部读档+异常报错
  9. java操作elasticsearch实现基本的增删改查操作
  10. Android Studio在华为真机上运行无法输出Debug日志解决
  11. 洛谷P1135 奇怪的电梯 BFS例题
  12. android WiFi ASSOC_REJECT 流程跟踪
  13. DOS 配置IP地址
  14. 用 Excel 生成和管理 Markdown 表格--转载
  15. NPOI导出Excel2007-xlsx格式文件,用于web时需要注意的问题-XSSFWorkbook处理问题
  16. cocos-lua基础学习(四)quick层封装后的目录结构
  17. for循环练习题(共六道题)
  18. Good Bye 2015 F - New Year and Cleaning
  19. RPC服务框架dubbo(二):dubbo支持的注册中心
  20. mysql 字段属性 与 排序

热门文章

  1. LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现
  2. Android如何制作自己的依赖库上传至github供别人下载使用
  3. tesseract系列(1) -- tesseract用vs编译成库
  4. 虚拟机enp0s8网卡无法联网和开放linux端口
  5. django,模板继承常用标签和规则
  6. CString转换成std::string
  7. 使用lambda表达式优雅你的事务代码
  8. 对kotlin和java中的synchronized的浅谈
  9. CAS 5.3.x 相关信息
  10. sql常见面试(2)