《了不起的Node.js》摘要 JavaScripts概览(三)

V8中的JavaScript

随着Chrome浏览器的发布,带来了全新的JavaScript引擎V8,它以极快的速度运行,加之时刻保持最新并支持最新ECMAScript特性的优势,快速地在浏览器中占据了重要的位置。
其中有些特性弥补了语言本身的不足。另外一部分特性的引入则要归功于像jQuery/PrototypeJS这样的前端类库,因为它们提供了非常实用的扩展和工具。

Object Keys

要想获取对象的键(a和c):

var a = {a:'b', c : 'd'}
for(var i in a){}

通过对键进行迭代,可以将它们收集到一个数组中。不过如果采用如下方式进行过扩展

Object.prototype.c = 'd'

为了避免在迭代过程中取到c属性,可以通过hasOwnPropterty来进行检查

for(var i in a){
  if(a.hasOwnPropterty(i){}
}

或者通过以下方式来检查

var a  = {a:'b', c : 'd'}
Object.keys(a);  // ['a', 'c']

Array.isArray

对数组使用typeof操作符会返回object。然后大部分情况下,我们要检查数据是否真的是数组。
Array.isArray对数组返回true,否则返回false

Array.isArray(new Array()) // true
Array.isArray([]) // true
Array.isArray(null) // false
Array.isArray(arguments) // false

数组方法

要遍历数组,可以使用forEach(类似jQuery的$.each)

// 打印 1,2,3
[1,2,3].forEach(function(v){console.log(v)})

要过滤元素使用filter(类似jQuery的$.grep)

// 返回[1,2]
[1,2,3].filter(function(v){return v < 3})

要改变值使用map(类似jQuery的$.map)

// 返回[2,4,6]
[1,2,3].map(function(v){return v * 2})

V8还对数组提供了一些方法 reduce reduceRight以及lastIndexof.

字符串方法

要移除字符串首末的空格,可以使用trim

' hello   '.trim() // 'hello'
'i am a boy'.trim() // i am a boy 中间的空格不会移除

JSON

V8提供了JSON.stringify和JSON.parse方法来对JSON数据进行解码、编码。
JSON是一种编码标准,和JavaScript对象字面量很近,它用于大部分WEB服务器和API服务

var obj = JSON.parse({'a':'b'})
obj.a == 'b' // true

function.bind

.bind (类似于jQuery的$.proxy)允许改变对this的引用

function a(){
  this.hello == 'world'  //true
};
var b = a.bind({hello:'world'})
b() // 与call和apply不同,bin不会立即调用,直接手动调用b()

function.name

V8还支持非标准的函数属性名:

var a = function woot() {};
a.name == 'woot' // true

该属性属于V8内部的堆栈追踪。当有错误抛出时,V8会显示一个堆栈的追踪信息,会告诉你是哪函数调用导致了错误的发生

var woot = function() {throw new Error()}
woot()

在上述例子中,v8无法为函数引用指派名字。然而,如果对函数进行了命名,V8就能在显示堆栈时追踪信息时将名字显示出来:

var woot = function buggy(){throw new Error()}
woot()
Error
    at buggly (repl:1:37)

为函数全名有助于调试,因此,推荐始终对函数进行全名。
实测下来node8.x以后woot就是函数名

proto

____proto____使得定义继承链变理更加容易:

function Animal(){}
function Ferret() {}
Ferret.prototype.__proto__ = Animal.prototype

这样就不用像以往那样借助中间构造器了

存取器

你可以通过调用 方法来定义属性,访问属性就是使用 ____defineGetter____设置属性使用__defineSetter____
比如,为Data对象定义一个属性,返回以自然语言描述的日期间隔。
比如:发生在三秒前比具体的日期容易理解

//
Date.prototype.__defineGetter__('ago', function(){
  var diff = (((new Date())).getTime() - this.getTime()) / 1000),
  day_diff = Math.floor(diff / 86400)
return day_diff == 0 && (diff < 60 && 'just now' || diff < 120 && '1 minute ago' ||
  diff < 3600 && Math.floor(diff / 60) + 'minute ago' ||
  diff < 7200 && '1 hour ago' ||
  diff < 86400 && Math.floor(diff / 3600) + 'hours ago' ||
  day_diff == 1 && 'Yesterday' ||
  day_diff < 7 && day_diff + 'day ago' ||
  Math.ceil(day_diff / 7) + 'weeks ago'
})

然后,简单的访问ago属性即可。注意,访问属性实际上还会调用定义的函数,只是这个过程透明了而已:

var a = new Date('12/12/1990')
a.ago
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容