注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Minary_Acdream

http://f10.moe/

 
 
 

日志

 
 

Node.js学习-第一章-JavaScript基础  

2014-06-07 21:14:38|  分类: node.js |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一.类型
    基本类型:number, boolean, string, null, undefined
    复杂类型:array, function, object
var a = ['hello','hi'];
var b = a;
b[0= 'bye';
a[0]; //结果为'bye'   
   因为b和a包含了对值的相同引用,因此修改b时,a也相应改变了,即a[0=== b[0];

二.函数
    ?在javascript中,函数最为重要。
    他们都属于一等函数:可以作为引用存储在变量中,随后可以像其他对象一样,进行传递:
      var a = function() {};
       
    2.1THIS, FUNCTION#CALL, FUNCTION#APPLYA
    
    下述代码中函数被调用时,this的值是全局对象,在浏览器中,就是window对象。
    
    function a(){
        window == this;  //true
    };
    a();
    调用以下函数时,使用.call和.apply方法可以改变this的值
  function a(){
        this.a == 'b';    //true
    };
    a.call({a : 'b'});
   
    每个函数都包含两个非继承而来的方法:apply()和call(),他们的用途相同,都是在特定的作用域中调用函数。
    apply接收两个参数,一个是函数运行的作用域(this),另一个是参数数组;(参数数组)
    call方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来(参数列表)
  
  function a (b, c) {
        b == 'first';    //true
        c == 'second';    //true
    };
    a.call (a, 'first''second') ;
    a.apply(a, ['first''second']);
    
    2.2 函数的参数数量

  var a = function(a, b, c){};
    a.length == 3 ;    //true

 闭包
    在javascript中,每次函数调用时,新的作用域就会产生。
    在某个作用域中定义的变量只能在该作用域或其内部作用域中才能访问到。

自执行函数
    var a = 3;
   (function(){
        var a = 5;
    })();
    a == 3;  //true;
    自执行函数对声明私有变量很有用,这样可以让私有变量不被其他代码访问
    匿名自执行函数:首先它没有名字,其次,它在定义之后会直接被执行,而且它没法再被执行,因为它没有名字。
    匿名自执行函数有很多用处,主要是用于封装,比如看jquery或者dojo的源码发现它们都是封装在匿名自执行函数中,这样就可以做到页面加载时自动初始化,而且向外公开它想公开的属性和方法,而用到的临时变量可以安全封闭在匿名函数内。
    函数名后面加上一对()就是执行这个函数,那么下面这个括号表达式就是定义一个函数,括号表达式的返回值就是这个函数。

 类
        javascript没有class关键词,类只能通过函数定义
function Hello (hello) {    
    this.hello = hello;
}

Hello.prototype.sayHello(){
    return this.hello;
}

var hello = new Hello("hi~");
hello.sayHello();    //hi~
继承
        javascript有基于原型的继承的特点。通常,可以通过以下方法来模拟类继承。
function Hi () {};
Hi.prototype = new Hello();
        接下来可以为子类定义属性和方法:
       Hi.prototype.world = "world";    //为所有的Hi实例定义world属性        还可以通过prototype来重写和调用父类函数
 Hi.prototype.eat = function(food){        
    Hello.prototype.eat.call(this, food);
     }
  
        
TRY { } CATCH{ } 
        try/catch允许进行异常捕获。使用这个就可以使有错误的时候继续执行下去。
function () {
    var a = 5;
    try {
        a () ;
    }catch (e) {
        e instanceof Error; // true;
    }
    console.log('you got here!');
}

OBJECT#KEYS
        想要获取下述对象的键(a和c):
        var a = {a : 'b' , c : 'd' };
        通常会使用如下的迭代方式:
for ( var i in a) { 
        if(a.hasOwnProperty(i)){}
    };   //通过对键进行迭代,可以将它们收集到一个数组中。              
        在V8中,要获取对象上所有的自由键,还有更简单的方法:      
 var a = {a : 'b' , c : 'd' };   
 Object.keys(a); //['a','c']

ARRAY#ISARRAY
    由于对数组使用typeof操作符会返回object,而有时候我们需要判断是否为真数组,这时候就会用isArray来判断。
    Arrar.isArray(new Array);

数组方法
     遍历数组,可以使用forEach(类似jQuery的$.each): 
   [1,2,4].forEach(function (v){   
     console.log(v);
});
    
    过滤数组,可以使用filter(类似jQuery的$.grep):
function isEven(elem) {   
  return elem % 2 == 0;
}
var array3 = [123456789];
var filterArray = filter(isEven, array3);
console.log(filterArray);

    改变数组中的每个值:
     // 利用map实现数组向下取整
    var array = [1.34.56.789.2];
    var mappedArray = map(Math.floor, array);
    console.log(mappedArray);
    V8还提供了些 reduce,reduceRight,lastIndexOf方法。

字符串方法
    移除字符串首末空格:'    hello    '.trim();

JSON
    V8提供了JSON.sringifyJSON.parse方法来对JSON数据进行编码解码
    JSON是一种编码标准,和javascript对象字面量很相近,它用于大部分的web服务和API服务:
var obj = JSON.parse('{"a" : "b"}');
obj.a == 'b'//true
    JSON.stringify(value ,[replacer], [space]) 编码
    value:是必须要的字段。就是你输入的对象,比如数组啊,类啊等等。 
    replacer:这个是可选的。它又分为2种方式,一种是方法,第二种是数组。 
    space:很好理解,用什么来做分隔符的。 
1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来 
2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10. 
3.如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。 
4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。 
    JSON.parse用于从一个字符串中解析出json对象

var str = '{"name":"lalal~","age":"23"}';
JSON.parse(str);

    1. age"23"
    2. name"lalal~"
    3. __proto__Object
    4. 注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
 FUNCTION#NAME
        V8还支持非标准的函数属性名:      
var  a =  function woot() {};
a.name == 'woot'//true

__PROTO__(继承)
    使定义继承链更加容易。
function A () { };
function B () { };
B.prototype.__proto__ = A.prototype;

存储器
    可以通过调用方法来定义属性,访问属性就用__defineGetter__ ,设置属性就用__defineSetter__。
    例如,为Date对象定义一个称为ago的属性,返回以自然语言描述的日期间隔。
Date.prototype.__defineGetter__('ago'function() {
    var diff = (((new Date()).getTime() - this.getTime()) / 1000);
    var 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" ||
        day_diff == 1 && "Yesterday" ||
        day_diff < 7 && day_diff + "days ago" ||
        Math.cell (day_diff / 7+ "weeks ago";
        )
});

var a = new Date('12/12/1990');
a.ago;





  评论这张
 
阅读(84)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018