Node.js入门笔记(1):基本概念
Node.js和JavaScript:
核心都是ECMAScrit,比如数据类型,语法结构,内置对象等等。
但是在js中顶层是window
在node中的不存在这个window(console.log(this)的结果是{}
),它的顶层是全局对象(global),但是,当在node.js中定义一个a时。通过却global.a访问不了a。
javascript
包括ECMAScript、DOM和BOM
而node.js包括
ECMAScript、OS(操作系统)、file(文件)、net(网络)和database(数据库)。
前者用于运行浏览器,后者用来操作系统。
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
第一段node.js程序
新建一个hello.js文件
console.log('hello nod.js!');
去官网下载编译器安装包。安装完之后双击出现命令行
也可以通过win+R打开cmd,输入node回车
表示安装没问题。退出:Ctrl+D或者Ctrl+C两次。
看版本(没有进入node.js时候):node -v
现在允许之前的hello.js文件,node 路径文件名即可、
路径比较麻烦的话,可以如下操作
这样就可以通过相对路径进行访问
webstorm环境下使用node.js
以下通过webstorm来操作node.js
打开一个空文件夹以创建项目
在settings里面添加
加载node.js的npm
点确定。就可以右键run运行node.js了。
模块的使用
var a=100
这个a是属于模块的,不是全局变量。一个文件就是一个模块。每个模块都有自己的作用域。
我们使用var 声明的一个变量,他并不就是全局的,而是属于当前模块。
你想声明一个全局变量,必须global.a=200
每个文件都有一个独特的__filename属性
//__filename:当前文件被解析之后的绝对路径(双下划线)
console.log(__filename);
模块加载
在javascript的书写方法下引入其它js是通过<script>
而在当前,用的是:
在1.js的同一个目录下新建一个2.js
写入
console.log('这是模块2.js')
保存
然后回到1.js输入reruire('./2.js')
ctrl+shift+F10.发现模块2.js的内容被打印出来了。
模块的加载机制
require('模块路径')
- 模块路径问题:可以写相对,也可以写绝对。相对路径同目录下必须加上
../
如果直接写,加载的是node.js中的核心模块。或者是node_modules
。 - 你可以写
require(../2)
,可以查找到,首先按照模块文件名称进行经查找。如果没有找到,会在模块名称后加上.js
后缀进行查找。 - 如果还未查找到,则会查找
.json
后缀 - 再找不到就是查找
.node
后缀,还没有的话再弹出错误。
module和exports
如何调用其它模块内的变量?
在2.js中写入var a=100
,在1.js中想要用到2.js中的a,不能在require 2.js
后,直接console.log(a)!!——然而你可以:
如果模块能够访问另一个模块中的变量。可以:
- 把变量作为global对象属性(
global.a=100
)——不推荐此做法。(全局污染) - 使用模块接口: module——保存和当前模块有关的信息。module下有一个子对象:exports对象。可以通过它把一个模块的局部变量输出到别的模块中。
在2.js文件写入:
var a=100;
module.exports.a=a;
而1.js这样写:
var m=require('./2');//返回值其实就是被加载模块中的module.exports
console.log(m);
返回的是{a:100}
.也就是说,require('./2')返回的是所有在模块2中被定义的值的集合。在模块作用域,还有内置的模块对象exports——其实就是module.exports
var a=100;
module.exports.a=a;
console.log(module.exports===exports)//返回true
注意不要破坏引用关系,如果2.js这样写:
var a=100;
module.exports.a=a;
module.exports=[1,2,3];
1.js引入2.js后,就找不到a了。
Node.js入门笔记(1):基本概念的更多相关文章
- Node.js入门笔记(6):web开发方法
使用node进行web开发 用户上网流程: 表面上看:打开浏览器--输入网址--跳转--上网. 背后的过程是什么呢? http请求网址到指定的主机--服务器接收请求--服务器响应内容到用户浏览器--浏 ...
- Node.js入门笔记(5):案例两则
案例分析:前端自动化 1. 实现一个自动创建前端项目文件的js 通过node.js自动创建前端项目目录,包括js目录,js目录css目录,index.html和对应的内容. 初步的代码如下: var ...
- Node.js入门笔记
第一步自然是安装了.我是用Webstorm这个ide,安装分2步: 1.安装nodejs,下载Windows下的安装版本号.注意是以msi为扩展名的,然后下一步.没啥好说的,下载地址例如以下: 32位 ...
- Node.js入门笔记(2):全局对象(1)
以下将以API文档为基础进行分析学习 global对象 这些对象在所有模块里都可用.有些对象不是在全局作用域而是在模块作用域里,这些情况下面文档都会标注出来. __filename--返回当前模块文件 ...
- Node.js入门笔记(4):文件系统(fs)
文件系统(FileSystem) 文件系统模块 对于文件无外乎创建修改添加. File System - 文件系统模块 - require('fs') fs模块是核心模块,需要使用require导入后 ...
- Node.js入门笔记(3):全局对象(2)
buffer 用于更好操作二进制数据,他是一个全局变量.类似数组. var a=new Buffer(); buffer类的三种实现 第一种创建方式 new Buffer(size);size[Num ...
- Node.js 入门资料
小毛驴的阿凡提的 Node.js 入门笔记 http://www.cnblogs.com/Afanty/category/1007304.html
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
随机推荐
- W3School-CSS 分类 (Classification) 实例
CSS 分类 (Classification) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) ...
- SQL报表(Report Builder)里面的几个常见问题(持续更新)
一 SQL报表常常会遇到在表格中的相除,如果分母为零,一般会显示错误号,我们可以这么处理:(加上是A/B) ,, B) 但是我们不能这么写: ,,A/B) //我们不能这么写,会产生BUG,至于什么B ...
- TCP协议
TCP是一个面向连接的协议,在发送数据之前,必须在双方之间建立一条连接. TCP首部 TCP数据封装在IP数据报中 TCP包首部 下面简单说明部分字段的作用: 端口号:通讯双方由IP地址和端口号标识. ...
- PKCS#1规范阅读笔记1--------基本概念
规范中有很多数学相关的推演和计算,并不打算在这里介绍,主要介绍一下相关的计算流程及最终的签名结果. 算法可以分为:对称算法和非对称算法两大类.对称算法加密和解密都用的是同一个密钥:而非对称算法却是有一 ...
- oracle连接方式、创建数据库用户、忘记数据库密码、用户锁定
一.oracle六种连接方式 ①myEclipse中 打开myEclipse,window----show view----Other---输入DB点击DB browser 选中右键New.出现如下页 ...
- Struts2 internationalization(国际化)
1:什么是国际化? 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式.它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素.换言之,应用程序的功 ...
- AC日记——校门外的树(增强版) 洛谷 P1276
题目描述 校门外马路上本来从编号0到L,每一编号的位置都有1棵树.有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B):幸运的是还有植树者每次从编号C到D 中凡是 ...
- inverse
首先术语inverse 被翻译为反转的意思.inverse 制定了关联关系中的方向. 当set的inverse属性默认情况下,hibernate会按照持久化对象的属性变化来同步更新数据库. 得到两条s ...
- IO(四)----对象的序列化
对象的序列化: 将内存中的对象直接写入到文件设备中. 对象的反序列化: 将文件设备中持久化的数据转换为内存对象. 自定义类只要实现了Serializable接口,便可以通过对象输入输出流对对象进行 ...
- 谁让APP工程师产生了泡沫?
这两年移动互联网比较火,移动APP的开发人员也是比较紧缺. 面试了一个做APP的,能力很一般,态度也比较傲慢.最后感觉肯定不会用这个人了,但是出于验证自己想法的目的,还是很诚恳地以一个决定录取他的态度 ...