一:先上一段代码

process.argv.forEach(function (val, index, array) {
    console.log(index + ":" + val);
    if(index == 0) {
        console.log(array);  // 是个Array
    }
    // process.argv在forEach方法里以this直接引用
    if(index == process.argv.length - 1) {
        console.log(array == this);  // output false,因为array是Array.from(process.argv)获得的
        console.log(array.length);  // 可以不要分号,输出为:5
    }
});
// 输出:/usr/local/nodejs/bin/node,/home/silentdoer/tmp/test.js,bb,ss,uu nn
console.log("\n" + process.argv);
var arr = [1, 'tt', 3, "tttss", 5];
// 输出:1,tt,3,tttss,5;由上面的输出可知js中[]就类似java的数组,而Array反而像java的List
console.log("\n" + arr);
//var list = new Array();
//list.push(31, 'sss', 88, "uu", 19);  // 在后面添加元素
var list = Array.from(arr);  // []在js里称为类数组,Array则是数组,不过个人更习惯将前者叫数组,后者叫List
console.log(list);  // 自动会换行,console里还有其它输出方法如info/error等但都会换行
list.forEach(function (val, index, array) {
    // true, value is from arr.;这里输出true说明forEach内部会判断this是否是Array的实例,是就直接作为array传给这里的function func(姑且这么描述,其实只需要func即可,脚本语言对类型不是那么敏感)
    console.log((array == list) + ":" + val + ":" + index);
}); var list2 = Array.from(list);  // 下面能够获得length说明Array.from(arg)的参数可以不是[],
console.log(list == list2);  // false
console.log(list2.length);  // 5
console.log(list2 instanceof Array);  // true console.log(list instanceof Array);  // true list2 = Array.from("3b");  // 也ok,发现脚本语言也挺不错,各种随便写。。eval("3b")得到的还是"3b",而eval("33")获得的则是一个整数,不过此整数和"33"比较会相等,但是通过instanceof则能知道其当前的类型
console.error(list2.length);  // 2,因为字符有两个
console.error(list2[1]);  // b process.stdout.write("hello, ");  // 通过这个可以在终端上不换行输出
process.stdout.write("world.");
process.stdout.write("\n"); // 这里再做个其它总结,eval方法,其实和bash里的很像,将字符串重新计算得到结果\
// 它的意思是比如存在字符串:"[{"pro1":"mm","pro2":3},{"pro1":88}]"那么将此字符串作为\
// 参数data的形参是不能data.length获得2的,而eval(data).length则可以,这样就有效的\
// 防止了因为弱语言的原因可能误传了json对象而是传的其字符串;

然后终端上:node test.js bb ss "uu  nn"回车,输出结果

0:/usr/local/nodejs/bin/node
[ '/usr/local/nodejs/bin/node',
  '/home/silentdoer/tmp/test.js',
  'bb',
  'ss',
  'uu nn' ]
1:/home/silentdoer/tmp/test.js
2:bb
3:ss
4:uu nn
false
5 /usr/local/nodejs/bin/node,/home/silentdoer/tmp/test.js,bb,ss,uu nn 1,tt,3,tttss,5
[ 1, 'tt', 3, 'tttss', 5 ]
true:1:0
true:tt:1
true:3:2
true:tttss:3
true:5:4
false
5
true
hello, world.

可知对于js而言,[]和Array均具备forEach方法,通过上面的测试可以猜测JSON数组或Array的forEach方法的实现为(js语法还不是很清楚,大致是这样实现)

void forEach(func) {  // func就类似C#的委托
  var array = null;
  if(!(this instanceof Array)){
    array = Array.from(this);
  }else{
    array = this;
  }
for(int i=0;i<this.length;i++) { // 假定this.length就是数组或集合的元素个数的写法,this[i]就是数组或集合的第i个元素的写法;
func(this[i], i, array);
}
}
												

node.js初步总结的更多相关文章

  1. node.js初步

    Node.js介绍 Node.js 诞生于2009年,Node.js采用C++语言编写而成,是 一个Javascript的运行环境.Node.js 是一个基于 Chrome V8 引擎的 JavaSc ...

  2. 多语言(Java、.NET、Node.js)混合架构下开源调用链追踪APM项目初步选型

    1. 背景 我们的技术栈包括了Java..NET.Node.js等,并且采用了分布式的技术架构,系统性能管理.问题排查成本越来越高. 2. 基本诉求 针对我们的情况,这里列出了选型的主要条件,作为最终 ...

  3. 初步了解Node.js,学做简单的留言本案例

    在还没有正式的学Node.js的时候, 你们认为Node.js 对于前端来说是什么呢? 会认为Node.js 是框架? 认为这是类似Jquery的一个快速.简洁的JavaScript框架? 反正我自己 ...

  4. node.js module初步理解

    在开发一个复杂的应用程序的时候,我们需要把各个功能拆分.封装到不同的文件,在需要的时候引用该文件.没人会写一个几万行代码的文件,这样在可读性.复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组 ...

  5. Node.js 的初步理解

    Node.js 是一个采用C++语言编写的后端的 Javascript 的运行环境, 它使用了 google 的 V8虚拟机来解释和执行代码.Node.js 的有许多有用的内置的模块,比如 http, ...

  6. 初步揭秘node.js中的事件

    当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...

  7. Node.js机制及原理理解初步【转】

    一.node.js优缺点 node.js是单线程. 好处就是 1)简单 2)高性能,避免了频繁的线程切换开销 3)占用资源小,因为是单线程,在大负荷情况下,对内存占用仍然很低 3)线程安全,没有加锁. ...

  8. node.js中的路由(url)初步

    1.建立n4_root.js var http = require('http'); var url = require('url'); //这是node.js中自带的var router = req ...

  9. Node.js机制及原理理解初步

    http://blog.csdn.net/leftfist/article/details/41891407 一.node.js优缺点 node.js是单线程. 好处就是 1)简单 2)高性能,避免了 ...

随机推荐

  1. 压缩文件tar.gz和zip之间的区别

    我们在开发的时候通常要先下载相关的软件或者是源码,或者是jar包.在下载东西的时候总是碰见后缀是.tar.gz和.zip的问题,搞不清楚是怎么回事,不晓得下载哪个文件才是对自己有用的.现在我知道了,其 ...

  2. AutoConfig工具使用

    下载安装Auto工具包: http://code.taobao.org/mvn/repository/com/alibaba/citrus/tool/antx-autoconfig/1.0.9/ant ...

  3. PHP与apache配置

    在apache 的安装路径中找到 \conf\httpd.conf文件 在 LoadModule最后面添加如下代码: PHPIniDir "D:\PHP"LoadModule ph ...

  4. https 证书传递、验证和数据加密、解密过程解析

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...

  5. SpringBoot中使用Redis

    在SpringBoot中使用Redis,思路如下: 查询时先查Redis缓存,如果缓存中存在信息,就直接从缓存中获取. 如果缓存中没有相关信息,就去数据库中查找,查完顺便将信息存放进缓存里,以便下一次 ...

  6. 如何学习mybatis

    最近几天学习了mybatis框架,我是mybatis视频学习的.看这篇文章,我建议首先要会熟练使用MVC架构,再学习这个框架. 在我们写传统的MVC模式写Bean,Dao,Servlet时,我们每次调 ...

  7. Mysql优化性能优化21条

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

  8. iOS - xcode - label 字体自动根据宽高 显示完全

    1. label 左右约束要给.  2.代码实现label.adjustsFontSizeToFitWidth = YES

  9. CentOS 7安装zabbix步骤

    Zabbix配置安装 1.前期准备: 我自己的基础环境:CentOS 7 + Mysql 5.6 可以根据官网介绍一步一步安装,官网地址:https://www.zabbix.com/ 图1: 然后点 ...

  10. php的无刷新实现方法

    方法一: 我们通过http的204状态码,页面不跳转. 1.html代码如下: <!DOCTYPE HTML> <html lang="zh-CN"> &l ...