码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript学习笔记(二)

时间:2015-11-09 00:08:50      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

 

filter

过滤某些元素,返回剩下的元素。例,删除偶数只留下奇数:

var arr = [1,2,3,4,5,6];
    var r = arr.filter(function(x){
        return x % 2 != 0;
    });
    console.log(r);

闭包私有变量

用javascript实现一个私有变量的效果,如下:

function ZiZeng(x) {
        var z = x || 0;
        return {
            add: function() {
                z += 1;
                return z;
            }
        }
    }
    var zi = ZiZeng();
    console.log(zi.add(1));

generator

除了return以外,可以返回多次使用yield。例子:循环输出效果

function* AddNum(max)
    {
        var qishi = 0;
        while (qishi < max){
            yield qishi;
            qishi++;
        }
        return qishi;
    }
    for(var x of AddNum(5))
    {
        console.log(x);
    }

注意:function* 

typeof 与 instanceof

typeof 返回对象类型,例:typeof 1; //‘number‘

instanceof 用于判断一个变量是否某个对象的实例,例:"chenxy" instanceof String; //true

new object与object

var n = new Number(123); //实际上类型已经是object,所以类型尽量不要加new

var n = Number(‘123‘);  //转换为Number类型,类似于方法parseInt()

数字转换字符串

123.toString(); //异常,应写为 123..toString() 或 (123).toString()

正则表达式

\d 匹配数字,

\w 匹配字母或数字,

\s Tab或者空格

.   匹配任意字符,

* 任意个字符(包括0个),

+ 表示至少一个字符,

? 表示0或1个,

{n} 表示n个,

{n,m} 表示n-m个

[] 表示范围,比如:[0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线

A|B 匹配A或B,例如:[J|j]ava 可以匹配 Java 或 java

^表示行开头,例如:^\d

$表示行结束,例如:$\d

Javascript中,两种方法可以定义正则表达式

第一种:直接写,var a = /ABC\-001/;

第二种:实例化一个RegExp,var a = new RegExp(‘ABC\\-001‘);

判断是否匹配

var re = /^\d{3}$/;

re.test(‘000‘); //true

切分字符串

‘a b c  d‘.split(/\s+/); //[‘a‘,‘b‘,‘c‘]

分组

()表示要提取的分组。匹配成功以后会返回一个Array,第一个是本身,后面是匹配成功的字符串。例如:

var re = /^(\d{3})-(\d{3,8})$/;

re.exec(‘010-123456‘); //[‘010-123456‘,‘010‘,‘123456‘]

Json

Json一个六种数据类型。number、boolean、string、null、array、object。

定死了字符串必须是 UTF-8,必须用双引号

序列化

var xiaoming = {
        name:‘晨星宇‘,
        age:22,
        skills:[‘Javascript‘,‘C#‘,‘Oracle‘]
    };
    console.log(JSON.stringify(xiaoming)); 
    //{"name":"晨星宇","age":22,"skills":["Javascript","C#","Oracle"]}
    console.log(JSON.stringify(xiaoming,null,‘    ‘));
    //格式化
    console.log(JSON.stringify(xiaoming,[‘name‘,‘skills‘]));
    //筛选键值,{"name":"晨星宇","skills":["Javascript","C#","Oracle"]}

还可以传入一个函数,这样每个键值都会被函数先处理

function convert(key, value) {
    if (typeof value === ‘string‘) {
        return value.toUpperCase();
    }
    return value;
}

JSON.stringify(xiaoming, convert, ‘  ‘);

还可以自定义一个toJson方法,直接返回序列化的数据

var xiaoming = {
        name:‘晨星宇‘,
        age:22,
        skills:[‘Javascript‘,‘C#‘,‘Oracle‘],
        toJSON:function(){
            return {
                "Name":this.name,
                "Age":this.age
            };
        }
    };

反序列化

console.log(JSON.parse(‘{"name":"晨星宇","age":22,"skills":["Javascript","C#","Oracle"]}‘));

面向对象的JS

Js不去分类和实例的概念,都是通过原型(prototype)来实现面向对象编程的。举例:

比如说,我想买麦当劳,但是我们没有这个类。但现在有一个肯德基的类,如下:

    var KFC = {
        name:‘kfc‘,
        money:200,
        eat:true
    };

除了名字不一样,剩下挺相似,就用这个。如下:

var KFC = {
        name:‘kfc‘,
        money:200,
        eat:function(){
            console.log("开吃");
        }
    };
    function Create(name)
    {
        var s = Object.create(KFC);
        s.name = name;
        return s;
    }
    var M = Create("McDonald");
    M.eat();

M._proto_ = KFC   低版本IE不支持这种指向,尽量不要使用

原型链

上面Create这个函数,原型链为:Create ---> Function.prototype ---> Object.prototype ---> null

构造函数

function Hello(Name)
    {
        this.name = Name;
        this.hello = function (){
            alert(‘Hello‘ + Name);
        }
    }
    var xiaoming = new Hello("XiaoMing");
    xiaoming.hello();

注意,一定要加上new

继承

因为两个方法原型链相同,所以需要修复原型链的关系。才可实现继承,具体方法如下:

//修复原型链
    function inherits(Child,Parent)
    {
        var F = function(){}
        F.prototype = Parent.prototype;
        Child.prototype = new F();
        Child.prototype.constructor = Child;
    }
    function Student(props)
    {
        this.name = props.name || ‘Chenxy‘;
    }
    Student.prototype.hello = function(){
        alert(‘Hello,‘+this.name+‘!‘);
    }
    function PrimaryStudent(props)
    {
        Student.call(this,props);
        this.grade = props.grade || 1;
    }
    //实现原型链
    inherits(PrimaryStudent,Student);
    //调用方法
    var pri = new PrimaryStudent("Chenxy");
    pri.hello();

 

JavaScript学习笔记(二)

标签:

原文地址:http://www.cnblogs.com/chenxygx/p/4946140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!