(二)nodejs循序渐进-nodejs基本类型和循环条件语法篇(基础篇)

目录

入门之helloworld

进阶之helloworld  http服务器

步骤一、引入 required 模块

步骤二、创建服务器

基本语法篇 

变量声明

基础类型 

if else 

循环语句

for

for ... in

 while  do和do while

运算符 

加减乘除

==, ===, !=, !== 

typeof 

null,undefined,NaN


 

好了, 上一篇文章已经讲了node环境安装,这里我们开始第一个经典程序 helloworld

入门之helloworld

console.log("hello world");

运行 node hello.js

[root@VM_0_9_centos ~]# node hello.js 
hello world

就是这么简单,console.log是在控制台打印输出信息的函数。

进阶之helloworld  http服务器


之前我们用php做web网站的时候,需要 Apache 或者 Nginx 的 HTTP 服务器,并配上 mod_php5 模块和 php-cgi,整个"接收 HTTP 请求并提供 Web 页面"的需求就不需要 PHP 来处理。

不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的。

在我们创建 Node.js 第一个 "Hello, World!" 应用前,让我们先了解下 Node.js 应用是由哪几部分组成的:

  1. 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。

  2. 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

  3. 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

步骤一、引入 required 模块

我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http,实例如下:

var http = require("http");

步骤二、创建服务器

接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。

实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码:

var http = require('http');
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(80);
console.log('Server running at http://127.0.0.1/');

以上代码我们完成了一个可以工作的 HTTP 服务器。

使用 node 命令执行以上的代码:

node server.js
Server running at http://127.0.0.1/

基本语法篇 

变量声明

在 C/C++ 中,我们这么声明变量的:

void fun() {}
int a = 0;
char b = 'a';
float c = 1.0f;
void (*d)() = fun;  

而在 Node.js 中则是这样的:

function fun() {}
var a = 0;
var b = 'a';
var c = 1.0;
var d = fun;

所以,无论是什么类型的变量,在 Node.js 中都是以一个var来解决的。

基础类型 

Node.js 包含的基础类型差不多有如下几个:

  • number
  • string
  • boolean
  • array

这里注意string类型

var a="bc";
var b='bc'; //等价于“bc”

其中前三种类型可以直接赋值,而array的赋值只是一个引用赋值而已,在新变量中改变某个值的话旧变量的值也会改变,直接可以试试下面的代码:

var arr = [ 1, 2, 3 ];
var ref = arr;
ref[0] = 3;
console.log(arr);

它得出的结果是:

[ 3, 2, 3 ]

也就是说array要是复制出一个新的数组的话,不能用直接赋值的方法,而必须深拷贝(深拷贝我将会在后边章节里专门讲,读者不用着急)。

这里有必要讲一下array的三种创建方法。

第一种:

var words = new Array();
words[0] = "hello world";
words[1] = "hello C++"; 

第二种:

var words = new Array( "hello world", "C++");

第四种:

var word = [
    "hello word",
    "C++"
];

 

if else 

用法和C++等其他语言一样

var player = {
    "user_id"     : "1927u893233c2993u429o34",
    "user_name"   : "高司机",
    "gender"      : "man",
    "age"         : 18,
    "level"       : 2,
    "viplevel"    : 0,
    "exp"         : 23933,
    "section"     : 12
};

if(player["user_name"] == "高司机")
{
        console.log("找到了高司机");
}

循环语句

for

这个循环语句基本上跟 C/C++ 一样,都是

for(int i = 0; i < foo; i++)
{
    //...
}

而鉴于 Node.js 是弱类型,所以只需要:

for(var i = 0; i < foo; i++) {
    //...
}

for ... in

这种循环体适合用来获取JSON对象、数组、对象等这种键值对的,其中键是可以直接通过for 。。。 in 来获取的,值需要借助对象和键来间接获取。

比如我们有一个 JSON对象 如下:

var player = {
    "user_id"     : "1927u893233c2993u429o34",
    "user_name"   : "高司机",
    "gender"      : "man",
    "age"         : 18,
    "level"       : 2,
    "viplevel"    : 0,
    "exp"         : 23933,
    "section"     : 12
};

这个时候我们就可以用 for...in 来循环遍历了:

for(var key in player) {
    console.log(key + ": " + player[key]);
}

我们如果在命令行中打入下面的命令:

$ node foo.js

屏幕上就会显示下面的内容了:

user_id: 1927u893233c2993u429o34
user_name: 高司机
gender: man
age: 18
level: 2
viplevel: 0
exp: 23933
section: 12

 while  do和do while

用法和C++等其他语言类似

var player = {
    "user_id"     : "1927u893233c2993u429o34",
    "user_name"   : "高司机",
    "gender"      : "man",
    "age"         : 18,
    "level"       : 2,
    "viplevel"    : 0,
    "exp"         : 23933,
    "section"     : 12
};

while(1){
	if(player["user_name"] == "高司机")
	{
		console.log("找到了高司机");
		break;
	}else{
		console.log("没有找到");
	}
};

do{
	if(player["user_name"] == "高司机")
	{
		console.log("找到了高司机");
		break;
	}else{
		console.log("没有找到");
	}
}while(true);

运算符 

加减乘除

这几个运算符也就这样,要注意的是 +。它既可以作用于字符串,也可以作用于数值运算。弱类型语言虽然说类型是弱的,数字有时候可以以字符串的形态出现,字符串有时候可以用数值的形态出现,但是在必要的时候也还是要说一下它是什么类型的,我们可以用下面的代码去看看结果:

var a = "0";
var b = 2;
console.log(a + b);
console.log(parseInt(a) + b);

这里的 parseInt 是 Node.js 的一个内置函数,作用是将一个字符串解析成 int 类型的变量,这里的a+b实际上因为a是字符串,所以+相当于是连接两个字符串,这个用法类似于php的 .. 连接两个字符串。

上面的代码执行结果是

02
2

那么此时有人要问了,如果数字+数字+字符串结果是什么样的呢?

var a = "0";
var b = 2;
var c = 3;
console.log(c + b + a);
console.log(parseInt(a) + b);

实际上运算符的执行顺序和C++是一样的,从左向右,因此先执行 c+b得到结果5,然后5和字符串“0”通过+连接相当于字符串的连接,所以结果是50,因此此段代码执行结果是

50
2

==, ===, !=, !== 

这里有一点要解释,当这个逻辑运算符长度为 2 的时候(==!=),只是判断外在的值是不是一样的,而不会判断类型。如

var a = 1, b = "1";
console.log(a == b);

它输出的结果就是 true

但是如果我们在中间判断的时候再加上一个等号,那么就是严格判断了,需要类型和值都一样的时候才会是 true,否则就是 false

var a = 1, b = "1";
console.log(a === b);

f他输出是false因为 a 是 int 型的,而 b 则是字符串。 

typeof 

这个运算符的作用是判断一个变量的类型,会返回一个字符串,即类型名,具体的执行下面的代码就知道了:

function fun() {
}

var a = 0;
var b = '高司机爱写BUG';
var c = 1.0;
var d = fun;
var e = { "a" : a };
var f = [ 1, 2, 3 ];
var g = null;
var h = undefined;

console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
console.log(typeof f);
console.log(typeof g);
console.log(typeof h);

这里的执行结果就将会是:

number
string
number
function
object
object
object
undefined

null,undefined,NaN

在nodejs里这三个有各自的含义:

null 是一种特殊的 object,意思就是空,但这个null跟0不相等。比如说:

var a = null;
if(a == 0)
{
	console.log("他俩相等");
}

undefined意思就是说这个变量未声明。为了能够更好地区分null,我们的样例代码如下写:

var player = {
    "user_id"     : "1927u893233c2993u429o34",
    "user_name"   : "高司机",
    "gender"      : "man",
    "age"         : 18,
    "level"       : 2,
    "viplevel"    : 0,
    "exp"         : 23933,
    "section"     : 12,
    "achievement" : null
};

console.log("成就:"+player["achievement"]);
console.log("每日任务:"+player["dailytask"]);

上面的代码中,我们让 player["achievement"] 的值为null。而压根没有声明 player["dailytask"] 。输出的结果大家都差不多应该猜到了:

成就:null
每日任务:undefined

NaN这是一个空的数值,是一个特殊的number。它的全称是Not a Number。大家可以理解为 不是数字形态,或者数值出错的 number 类型变量

多在浮点型数值运算错误(如被0除)的情况下出现,甚至可以是用户自己让一个变量等于NaN以便返回一个错误值让大家知道这个函数运算出错了云云。

 

 

 

已标记关键词 清除标记
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值