标签:
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();
标签:
原文地址:http://www.cnblogs.com/chenxygx/p/4946140.html