欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NodeJs基本語(yǔ)法和類(lèi)型

 更新時(shí)間:2015年02月13日 10:26:45   投稿:hebedich  
這篇文章主要介紹了NodeJs基本語(yǔ)法和類(lèi)型的相關(guān)資料,需要的朋友可以參考下

寫(xiě)在前面

今天想要查下Node的類(lèi)型什么的知識(shí),想要總結(jié)下,在Googol上看到一個(gè)文章,但是原始的鏈接不在了,在快照中把這篇文章拉出來(lái),如果原作者有問(wèn)題,請(qǐng)聯(lián)系我!

該文章都是一些JS的基礎(chǔ),高手自動(dòng)跳過(guò)!我之前沒(méi)怎么寫(xiě)過(guò)js,這方面比較弱,所以在寫(xiě)node的時(shí)候也遇到了麻煩,這里給自己補(bǔ)充下知識(shí)!

正文

Node.js 的基礎(chǔ)是 JavaScript 這門(mén) 腳本語(yǔ)言。而大多數(shù)的腳本語(yǔ)言一個(gè)共同的特點(diǎn)就是“弱類(lèi)型”。

不同于 PHP 的是,PHP 就是是有了新變量也無(wú)需申明,而 JavaScript 則還是需要 var 來(lái)申明一下的。而這個(gè) var 涵蓋了 C++ 中的int、string、char等一切類(lèi)型的含義,甚至是 function。

本篇以及后篇的所有內(nèi)容都是在 Linux 或者 Cygwin 下用 vim 進(jìn)行編輯(若不是則請(qǐng)自行轉(zhuǎn)變成你自己的方法),然后在命令行下進(jìn)行查看結(jié)果的。

基本語(yǔ)法

變量聲明

在 C/C++ 中,我們這么聲明變量的:

```C++

復(fù)制代碼 代碼如下:

void foo() {}
int a = 0;
char b = 'a';
float c = 1.0f;
void (*d)() = foo; ///< 忘了是不是這么寫(xiě)的了,總之是函數(shù)指針

而在 Node.js 中則是這樣的:
```javascript

復(fù)制代碼 代碼如下:

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

所以,無(wú)論是什么類(lèi)型的變量,在 Node.js 中都是以一個(gè) var 來(lái)解決的。

循環(huán)語(yǔ)句

for…i

這個(gè)循環(huán)語(yǔ)句基本上跟 C/C++ 一樣,都是

```C++

復(fù)制代碼 代碼如下:

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

而鑒于 Node.js 是弱類(lèi)型,所以只需要:
```javascript

復(fù)制代碼 代碼如下:

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

這是一種后有型的循環(huán)語(yǔ)句,類(lèi)似于 PHP 的 foreach。

比如我們有一個(gè) JSON對(duì)象 如下:

javascript

復(fù)制代碼 代碼如下:

var foo = {
    "hello"     : "world",
    "node"      : "js",
    "blahblah"  : "bar"
};

這個(gè)時(shí)候我們就可以用 for...in 來(lái)循環(huán)遍歷了:

javascript

復(fù)制代碼 代碼如下:

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

我們?nèi)绻诿钚兄写蛉胂旅娴拿睿?/p>

復(fù)制代碼 代碼如下:

$ node foo.js

屏幕上就會(huì)顯示下面的內(nèi)容了:

復(fù)制代碼 代碼如下:

hello
: world
node: js
blahblah: bar

提示:由上可知,for...in 語(yǔ)句是用來(lái)遍歷 JSON對(duì)象、數(shù)組、對(duì)象的鍵名的,而不提供鍵值的遍歷。如果要獲取鍵值,只能通過(guò)foo[<當(dāng)前鍵名>]的形式來(lái)獲取。這個(gè)跟 PHP 的 foreach 還是有一定區(qū)別的。

while…do, do…whill

這個(gè)就不多做解釋了,跟其它語(yǔ)言沒(méi)什么大的區(qū)別,無(wú)非就是如果有變量聲明的話(huà),需要用 var 就夠了。

運(yùn)算符

+, -, *, /

這幾個(gè)運(yùn)算符也就這樣,要注意的是 +。它既可以作用于字符串,也可以作用于數(shù)值運(yùn)算。弱類(lèi)型語(yǔ)言雖然說(shuō)類(lèi)型是弱的,數(shù)字有時(shí)候可以以字符串的形態(tài)出現(xiàn),字符串有時(shí)候可以用數(shù)值的形態(tài)出現(xiàn),但是在必要的時(shí)候也還是要說(shuō)一下它是什么類(lèi)型的,我們可以用下面的代碼去看看結(jié)果:

復(fù)制代碼 代碼如下:

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

這里的 parseInt 是 Node.js 的一個(gè)內(nèi)置函數(shù),作用是將一個(gè)字符串解析成 int 類(lèi)型的變量。

上面的代碼執(zhí)行結(jié)果是:

復(fù)制代碼 代碼如下:

12
3

注:第一個(gè) console.log 結(jié)果是 12,由于 a 是字符串,所以 b 也被系統(tǒng)以字符串的姿態(tài)進(jìn)行加操作,結(jié)果就是將兩個(gè)字符串黏連在一起就變成了 12。而第二個(gè) console.log 結(jié)果是 3,是因?yàn)槲覀儗⒌谝粋€(gè) a 轉(zhuǎn)變?yōu)榱?int 類(lèi)型,兩個(gè) int 型的變量相加即數(shù)值相加,結(jié)果當(dāng)然就是 3 了。

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

這里有一點(diǎn)要解釋?zhuān)?dāng)這個(gè)邏輯運(yùn)算符長(zhǎng)度為 2 的時(shí)候(==, !=),只是判斷外在的值是不是一樣的,而不會(huì)判斷類(lèi)型。如

復(fù)制代碼 代碼如下:

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

它輸出的結(jié)果就是 true 。但是如果我們?cè)谥虚g判斷的時(shí)候再加上一個(gè)等號(hào),那么就是嚴(yán)格判斷了,需要類(lèi)型和值都一樣的時(shí)候才會(huì)是 true,否則就是 false。也就是說(shuō)

復(fù)制代碼 代碼如下:

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

的時(shí)候,返回的結(jié)果就是 false 了,因?yàn)?a 是 int 型的,而 b 則是字符串。

順帶著就把條件語(yǔ)句講了吧,其實(shí)這里的 if 跟別的語(yǔ)言沒(méi)什么兩樣,就是幾個(gè)邏輯運(yùn)算符兩個(gè)等號(hào)三個(gè)等號(hào)的問(wèn)題。所以就不多做累述了。

typeof

這里我姑且把它當(dāng)成是一個(gè)運(yùn)算符而不是函數(shù)了。

這個(gè)運(yùn)算符的作用是判斷一個(gè)變量的類(lèi)型,會(huì)返回一個(gè)字符串,即類(lèi)型名,具體的執(zhí)行下面的代碼就知道了:

復(fù)制代碼 代碼如下:

function foo() {}
var a = 0;
var b = '噓~蛋花湯在睡覺(jué)。';
var c = 1.0;
var d = foo;
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);

這里的執(zhí)行結(jié)果就將會(huì)是:

復(fù)制代碼 代碼如下:

number
string
number
function
object
object
object
undefined

null, undefined, NaN

在 JavaScript 中,有三個(gè)特殊的值,如標(biāo)題所示。其中第一個(gè)大家可能都比較熟悉吧,C/C++ 里面也有,不過(guò)是大寫(xiě)的,其本質(zhì)就是一個(gè)

```C++

define NULL 0

而在 JavaScript 中,這三個(gè)值所代表的意義都不同。

### null ###

null 是一種特殊的 object,大致的意思就是空。比如說(shuō):

var a = null;
大家都能看懂,就不多做解釋了。但是跟 C/C++ 不同的是,這個(gè) null 跟 0 不相等。

### undefined ###

這個(gè)東西的意思就是說(shuō)這個(gè)變量未聲明。為了能夠更好地區(qū)分 null,我們的樣例代碼如下寫(xiě):

```javascript

復(fù)制代碼 代碼如下:

var a = {
    "foo" : null
};
console.log(a["foo"]);
console.log(a["bar"]);

上面的代碼中,我們讓 a["foo"] 的值為空,即 null。而壓根沒(méi)有聲明 a["bar"] 這個(gè)東西,它連空都不是。輸出的結(jié)果大家都差不多應(yīng)該猜到了:

復(fù)制代碼 代碼如下:

null
undefined

NaN

這是一個(gè)空的數(shù)值,是一個(gè)特殊的 number。它的全稱(chēng)是 Not a Number。有點(diǎn)奇怪,大家可以理解為 不是數(shù)字形態(tài),或者數(shù)值出錯(cuò)的 number 類(lèi)型變量。

多在浮點(diǎn)型數(shù)值運(yùn)算錯(cuò)誤(如被0除)的情況下出現(xiàn),甚至可以是用戶(hù)自己讓一個(gè)變量等于 NaN 以便返回一個(gè)錯(cuò)誤值讓大家知道這個(gè)函數(shù)運(yùn)算出錯(cuò)了云云。

小雜碎

其它剩余的語(yǔ)句也跟已存在的其它語(yǔ)言差不多,比如說(shuō) break 啊、switch 啊、continue 啊等等等等。

變量類(lèi)型

這一節(jié)主要講的是 JavaScript 對(duì)象,其它類(lèi)型差不多一帶而過(guò)吧。

基礎(chǔ)類(lèi)型

Node.js 包含的基礎(chǔ)類(lèi)型差不多有如下幾個(gè):

number
string
boolean
array
其中前三種類(lèi)型可以直接賦值, 而 array 的賦值只是一個(gè)引用賦值而已,在新變量中改變某個(gè)值的話(huà)舊變量的值也會(huì)改變 ,直接可以試試下面的代碼:

javascript
var foo = [ 1, 2, 3 ];
var bar = foo;
bar[0] = 3;
console.log(foo);
它得出的結(jié)果是:

javascript
[ 3, 2, 3 ]
也就是說(shuō) array 要是復(fù)制出一個(gè)新的數(shù)組的話(huà),不能用直接賦值的方法,而必須“深拷貝”。

這里有必要講一下 array 的三種創(chuàng)建方法。

第一種:

javascript

復(fù)制代碼 代碼如下:

var dog = new Array();
dog[0] = "噓~";
dog[1] = "蛋花湯";
dog[2] = "在睡覺(jué)";

第二種:

javascript

復(fù)制代碼 代碼如下:

var dog = new Array( "噓~", "蛋花湯", "在睡覺(jué)" );

第四種:

javascript

復(fù)制代碼 代碼如下:

var dog = [
    "噓~",
    "蛋花湯",
    "在睡覺(jué)"
];

我個(gè)人比較喜歡第三種寫(xiě)法,比較簡(jiǎn)潔。

JSON對(duì)象

這里我把 JSON對(duì)象 單獨(dú)拎出來(lái)而不是把它歸類(lèi)為 JavaScript對(duì)象,如果覺(jué)得我有點(diǎn)誤人子弟就可以直接跳過(guò)這一節(jié)了。

本人對(duì)于 JSON對(duì)象 和 JavaScript 對(duì)象的區(qū)分放在 是否只用來(lái)存儲(chǔ)數(shù)據(jù),而并非是一個(gè)類(lèi)的實(shí)例化。其實(shí) JSON 的本質(zhì)便是 JavaScript Object Notation。

更多有關(guān) JSON 的信息請(qǐng)自行百科。

在 Node.js 中聲明一個(gè) JSON對(duì)象 非常簡(jiǎn)單:

javascript

復(fù)制代碼 代碼如下:

var dog = {
  "pre" : "噓~",
  "sub" : {
    "name" : "蛋花湯",
    "act"  : "在睡覺(jué)",
    "time" : 12
    },
  "suf" : [ "我說(shuō)了", "它在睡覺(jué)", "就是在睡覺(jué)" ]
};

有兩種方式能得到 JSON對(duì)象 中的某個(gè)鍵名的鍵值,第一種是用點(diǎn)連接,第二種是用中括號(hào):

javascript

復(fù)制代碼 代碼如下:

dog
.pre;
dog["pre"];

注意:上面在用點(diǎn)的時(shí)候,后面直接跟的是JSON中的key,如果把key當(dāng)成是變量去當(dāng)問(wèn),只能用dog[key]試試看:現(xiàn)在你自己動(dòng)手試試看,用 for...in 的形式遍歷一遍上面的 JSON對(duì)象。別忘了用上 typeof 喵~

類(lèi)(對(duì)象)的基礎(chǔ)

嚴(yán)格意義上來(lái)講,Node.js 的類(lèi)不能算是類(lèi),其實(shí)它只是一個(gè)函數(shù)的集合體,加一些成員變量。它的本質(zhì)其實(shí)是一個(gè)函數(shù)。

不過(guò)為了通俗地講,我們接下去以及以后都將其稱(chēng)為“類(lèi)”,實(shí)例化的叫“對(duì)象”。

因?yàn)轭?lèi)有著很多 函數(shù) 的特性,或者說(shuō)它的本質(zhì)就是一個(gè) 函數(shù),所以這里面我們可能一不留神就順帶著把函數(shù)基礎(chǔ)給講了。

類(lèi)的聲明和實(shí)例化

聲明一個(gè)類(lèi)非常簡(jiǎn)單,大家不要笑:

javascript
function foo() {
    //...
}
好了,我們已經(jīng)寫(xiě)好了一個(gè) foo 類(lèi)了。

真的假的?!真的。

不信?不信你可以接下去打一段代碼看看:

javascript
var bar = new foo();
別看它是一個(gè)函數(shù),如果以這樣的形式(new)寫(xiě)出來(lái),它就是這個(gè)類(lèi)的實(shí)例化。

而這個(gè)所謂的 foo() 其實(shí)就是這個(gè) foo() 類(lèi)的構(gòu)造函數(shù)。

成員變量

成員變量有好兩種方法。

第一種就是在類(lèi)的構(gòu)造函數(shù)或者任何構(gòu)造函數(shù)中使用 this.<變量名> 。你可以在任何時(shí)候聲明一個(gè)成員變量,在外部不影響使用,反正就算在還未聲明的時(shí)候使用它,也會(huì)有一個(gè) undefined 來(lái)?yè)沃?。所以說(shuō)這就是第一種方法:

復(fù)制代碼 代碼如下:

javascript
function foo() {
    this.hello = "world";
}

注意:只有在加了 this 的時(shí)候才是調(diào)用類(lèi)的成員變量,否則只是函數(shù)內(nèi)的一個(gè)局部變量而已。要分清楚有沒(méi)有 this 的時(shí)候變量的作用范圍。

第二種方法就是在構(gòu)造函數(shù)或者任何成員函數(shù)外部聲明,其格式是 <類(lèi)名>.prototype.<變量名>:

javascript

復(fù)制代碼 代碼如下:

function foo() {
    //...
}
foo.prototype.hello = "world";

無(wú)論上面哪種方法都是對(duì)成員變量的聲明,我們可以看看效果:

javascript

復(fù)制代碼 代碼如下:

var bar = new foo();
console.log(bar.hello);

甚至你可以這么修改這個(gè)類(lèi):

javascript

復(fù)制代碼 代碼如下:

function foo() {
    this.hello = "world";
}
foo.prototype.hello = "蛋花湯";

然后再用上面的代碼輸出。

想想看為什么輸出的還是 world 而不是 蛋花湯。

構(gòu)造函數(shù)

我們之前說(shuō)過(guò)了這個(gè) foo() 實(shí)際上是一個(gè) 構(gòu)造函數(shù)。那么顯然我們可以給構(gòu)造函數(shù)傳參數(shù),所以就有了下面的代碼:

javascript

復(fù)制代碼 代碼如下:

// 代碼2.1
function foo(hello) {
    if(hello === undefined) {
        this.hello = "world";
    } else {
        this.hello = hello;
    }
}

我們看到上面有一個(gè)奇葩的判斷 if(hello === undefined),這個(gè)判斷有什么用呢?第一種可能,就是開(kāi)發(fā)者很蛋疼地特意傳進(jìn)去一個(gè) undefined 進(jìn)去,這個(gè)時(shí)候它是 undefined 無(wú)可厚非。

還有一種情況。我們一開(kāi)始就說(shuō)了 JavaScript 是一門(mén)弱類(lèi)型語(yǔ)言,其實(shí)不僅僅是弱類(lèi)型,它的傳參數(shù)也非常不嚴(yán)謹(jǐn)。你可以多傳或者少傳(只要保證你多傳或者少傳的時(shí)候可以保證程序不出錯(cuò),或者邏輯不出錯(cuò)),原則上都是可以的。多傳的參數(shù)會(huì)被自動(dòng)忽略,而少傳的參數(shù)會(huì)以 undefined 補(bǔ)足。

看看下面的代碼就明白了:

javascript

復(fù)制代碼 代碼如下:

// 上接代碼2.1
var bar1 = new foo();
var bar2 = new foo("蛋花湯");

請(qǐng)自行輸出一下兩個(gè) bar 的 hello 變量,會(huì)發(fā)現(xiàn)一個(gè)是 world 一個(gè)是 蛋花湯。顯而易見(jiàn),我們的第一個(gè) bar1 在聲明的時(shí)候,被 Node.js 自動(dòng)看成了:

javascript

復(fù)制代碼 代碼如下:

var bar1 = new foo(undefined);

所以就有了它是 world 一說(shuō)。

還有就是在這個(gè)構(gòu)造函數(shù)中,我們看到了傳進(jìn)去的參數(shù)是 hello 而這個(gè)類(lèi)中本來(lái)就有個(gè)成員變量就是 this.hello。不過(guò)我們之前說(shuō)過(guò)了有 this 和沒(méi) this 的時(shí)候作用域不同,那個(gè)參數(shù)只是作用于構(gòu)造函數(shù)中,而加了 this 的那個(gè)則是成員變量。用一個(gè) this 就馬上區(qū)分開(kāi)來(lái)他們了,所以即使同名也沒(méi)關(guān)系。

成員函數(shù)

成員函數(shù)聲明

成員函數(shù)的聲明跟成員變量的第二種聲明方法差不多,即 <類(lèi)名>.prototype.<函數(shù)名> = <函數(shù)>;

javascript

復(fù)制代碼 代碼如下:

// 上接代碼2.1
function setHello(hello) {
  this.hello = hello;
}
foo.prototype.setHello = setHello;
bar1.setHello("雞蛋餅");

上面這段代碼顯而易見(jiàn),我們實(shí)現(xiàn)了 foo 類(lèi)的 setHello 函數(shù),能通過(guò)它修改 foo.hello 的值。

但是這么寫(xiě)是不是有點(diǎn)麻煩?接下去我要講一個(gè) JavaScript 函數(shù)重要的特性了。

★ 匿名函數(shù) ★

很多時(shí)候我們的某些函數(shù)只在一個(gè)地方被引用或者調(diào)用,那么我們?yōu)檫@個(gè)函數(shù)起一個(gè)名字就太不值了,沒(méi)必要,所以我們可以臨時(shí)寫(xiě)好這個(gè)函數(shù),直接讓引用它的人引用它,調(diào)用它的人調(diào)用它。所以函數(shù)可以省略函數(shù)名,如:

javascript

復(fù)制代碼 代碼如下:

function(hello) {
    this.hello = hello;
}

至于怎么引用或者調(diào)用呢?如果是上面的那個(gè)類(lèi)需要引用的話(huà),就是寫(xiě)成這樣的:

javascript

復(fù)制代碼 代碼如下:

foo.prototype.setHello = function(hello) {
    this.hello = hello;
}

這樣的寫(xiě)法跟 成員函數(shù) 聲明 是一個(gè)效果的,而且省了很多的代碼量。而且實(shí)際上,基本上的類(lèi)成員函數(shù)的聲明都是采用這種匿名函數(shù)的方式來(lái)聲明的。

至于說(shuō)怎么樣讓匿名函數(shù)被調(diào)用呢?這通常用于傳入一個(gè)只被某個(gè)函數(shù)調(diào)用的函數(shù)時(shí)這樣寫(xiě)。

比如我們有一個(gè)函數(shù)的原型是:

javascript

復(fù)制代碼 代碼如下:

/**
 * 我們將傳入a,b兩個(gè)變量,
 * 在算出a+b的值后,交由func(num)
 * 去進(jìn)行輸出
 */
function sumab(a, b, func) {
    var c = a + b;
    func(a, b, c);
}

比如我們有兩個(gè)版本的輸出函數(shù),一個(gè)是中文輸出,一個(gè)是英文輸出,那么如果不用匿名函數(shù)時(shí)候是這么寫(xiě)的:

javascript

復(fù)制代碼 代碼如下:

function zh(a, b, sum) {
  console.log(a + " + " + b + " 的值是:" + sum);
}
function en(a, b, sum) {
  console.log(a + " plus " + b + " is " + sum);
}
sumab(1, 2, zh);
sumab(3, 4, en);

執(zhí)行一遍這段代碼,輸出的結(jié)果將會(huì)是:

1 + 2 的值是:3
3 plus 4 is 7
這樣的代碼如果采用匿名函數(shù)的形式則將會(huì)是:

javascript

復(fù)制代碼 代碼如下:

sumab(1, 2, function(a, b, sum) {
    console.log(a + " + " + b + " 的值是:" + sum);
});
sumab(3, 4, function(a, b, sum) {
    console.log(a + " plus " + b + " is " + sum);
});

這種形式通常使用于回調(diào)函數(shù)?;卣{(diào)機(jī)制算是 Node.js 或者說(shuō) JavaScript 的精髓。在以后的篇章會(huì)做介紹。

成員函數(shù)聲明的匿名函數(shù)聲明方式

雖然上一節(jié)講過(guò)了,不過(guò)還是再講一遍吧。

通常我們聲明類(lèi)的成員函數(shù)時(shí)候都是用匿名函數(shù)來(lái)聲明的,因?yàn)榉凑莻€(gè)函數(shù)也就是這個(gè)類(lèi)的一個(gè)成員函數(shù)而已,不會(huì)在其它地方被單獨(dú)引用或者調(diào)用,所以就有了下面的代碼:

javascript

復(fù)制代碼 代碼如下:

// 上接代碼2.1
foo.prototype.setHello = function(hello) {
    this.hello = hello;
}

這樣我們就使得 foo 類(lèi)有了 setHello 這個(gè)函數(shù)了。

2.3.4. 類(lèi)的隨意性

這個(gè)又是我胡扯的。所謂類(lèi)的隨意性即 JavaScript 中你可以在任何地方修改你的類(lèi),這跟 Ruby 有著一定的相似之處。

比如說(shuō) string ,它其實(shí)也是一個(gè)類(lèi),有著諸如 length 這樣的成員變量,也有 indexOf、substr 等成員函數(shù)。但是萬(wàn)一我們覺(jué)得這個(gè) string 有些地方不完善,想加自己的方法,那么可以在你想要的地方給它增加一個(gè)函數(shù),比如:

javascript

復(fù)制代碼 代碼如下:

String.prototype.sb = function() {
  var newstr = "";
  for(var i = 0; i < this.length; i++) {
    if(i % 2 === 0) newstr += "s";
    else newstr += "b";
  }
  return newstr;
};

這個(gè)函數(shù)的意思就是填充一個(gè)字符串,使其變成 sb 的化身。

我們來(lái)測(cè)試一下:

復(fù)制代碼 代碼如下:

var str = "噓~蛋花湯在睡覺(jué)。";
console.log(str.sb());

你將會(huì)得到這樣的結(jié)果:

sbsbsbsbs
你跟你的電腦說(shuō)“噓~蛋花湯在睡覺(jué)?!保愕碾娔X會(huì)罵你四次半傻逼。(趕快砸了它)

3. 附

3.1. 深拷貝

所謂深拷貝就是自己新建一個(gè)數(shù)組或者對(duì)象,把源數(shù)組或者對(duì)象中的基礎(chǔ)類(lèi)型變量值一個(gè)個(gè)手動(dòng)拷過(guò)去,而不是只把源數(shù)組或者對(duì)象的引用拿過(guò)來(lái)。所以這就涉及到了一個(gè)遞歸的調(diào)用什么的。

下面是我實(shí)現(xiàn)的一個(gè)深拷貝函數(shù),大家可以寫(xiě)一個(gè)自己的然后加入到自己的 Node.js 知識(shí)庫(kù)中。

javascript

復(fù)制代碼 代碼如下:

function cloneObject(src) {
  var dest = {};
  for(var key in src) {
    if(typeof src === "object") dest[key] = cloneObject(src[key]);
    else dest[key] = src[key];
  }
  return dest;
}

相關(guān)文章

  • 安裝多版本node的完整步驟記錄

    安裝多版本node的完整步驟記錄

    在平時(shí)的使用中常會(huì)遇到這樣的場(chǎng)景,手上有多個(gè)前端項(xiàng)目,每個(gè)項(xiàng)目使用的Nodejs的版本都不太一致,下面這篇文章主要給大家介紹了關(guān)于安裝多版本node的完整步驟,需要的朋友可以參考下
    2024-01-01
  • Node.js Windows Binary二進(jìn)制文件安裝方法

    Node.js Windows Binary二進(jìn)制文件安裝方法

    這篇文章主要介紹了Node.js Windows Binary二進(jìn)制文件安裝,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • Node.js中防止錯(cuò)誤導(dǎo)致的進(jìn)程阻塞的方法

    Node.js中防止錯(cuò)誤導(dǎo)致的進(jìn)程阻塞的方法

    這篇文章主要介紹了Node.js中防止錯(cuò)誤導(dǎo)致的進(jìn)程阻塞的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法

    用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法

    本篇文章主要介紹了用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 解讀node.js中的path路徑模塊

    解讀node.js中的path路徑模塊

    這篇文章主要介紹了解讀node.js中的path路徑模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • node.js利用socket.io實(shí)現(xiàn)多人在線(xiàn)匹配聯(lián)機(jī)五子棋

    node.js利用socket.io實(shí)現(xiàn)多人在線(xiàn)匹配聯(lián)機(jī)五子棋

    這篇文章主要介紹了node.js利用socket.io實(shí)現(xiàn)多人在線(xiàn)匹配聯(lián)機(jī)五子棋的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • 使用Node.js配合Nginx實(shí)現(xiàn)高負(fù)載網(wǎng)絡(luò)

    使用Node.js配合Nginx實(shí)現(xiàn)高負(fù)載網(wǎng)絡(luò)

    這篇文章主要介紹了使用Node.js配合Nginx實(shí)現(xiàn)高負(fù)載網(wǎng)絡(luò),Node的異步加上Nginx的反向代理在性能上實(shí)在是給力!需要的朋友可以參考下
    2015-06-06
  • Centos7 中安裝 Node.js v4.4.4

    Centos7 中安裝 Node.js v4.4.4

    我一直對(duì)學(xué)習(xí)Node.js比較感興趣。這是一個(gè)Java平臺(tái)的服務(wù)器端編程 ,它允許開(kāi)發(fā)人員在服務(wù)器編寫(xiě)Java代碼,并且有許多CentOS的用戶(hù)正努力學(xué)習(xí)這個(gè)語(yǔ)言的開(kāi)發(fā)環(huán)境。這正是我想做這個(gè)教程的目的。
    2016-11-11
  • nvm報(bào)錯(cuò)Now?using?node?v版本號(hào)(64-bit)圖文解決方法

    nvm報(bào)錯(cuò)Now?using?node?v版本號(hào)(64-bit)圖文解決方法

    這篇文章主要給大家介紹了關(guān)于nvm報(bào)錯(cuò)Now?using?node?v版本號(hào)(64-bit)的解決方法,文中將解決的辦法介紹的非常詳細(xì),對(duì)遇到這個(gè)問(wèn)題的朋友具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • 三行命令切換Node.js版本的流程步驟

    三行命令切換Node.js版本的流程步驟

    如何在Windows上更新Node.js版本呢?有沒(méi)有那種不需要重新安裝軟件再修改配置文件和環(huán)境變量的方法?你是否還在為可能要重新安裝Node然后配置文件修改環(huán)境變量困擾?面就來(lái)介紹一下nvm更換node版本的步驟,需要的朋友可以參考下
    2024-01-01

最新評(píng)論