JavaScript学习笔记(二)

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();
时间: 2024-08-04 14:37:05

JavaScript学习笔记(二)的相关文章

javascript学习笔记(二)

一.javascript的放置.注释.输出工具 1.输出工具 a.alert():属于window中的全局函数.无论写入什么,都以字符串形式输出. b.document.write():向网页输出内容. c.var vlaue=prompt("显示内容","文本框显示内容")value为返回值:弹出一个输入框,接收参数. <script> alert(123); document.write("<h1>周静文</h1>&

前端乱煮之javascript学习笔记二

1 javascript的隐式转换规则: 若有布尔类型,则将它转换为数值进行比较. 若有NaN,一律返回false 若是字符串,则分为三种情况:对方为字符串就直接比较,对方为数值,则将字符串转化为数值,若对方为对象,则将对象用toString()的方法进行转换,然后再比较.最后,若是其他,则一律返回false. 若是数字,如果对方是对象,用valueOf()进行比较,其余一律返回false null 和defined不会进行类型转换,但是二者相等. 2 javascript中的break和con

Javascript 学习 笔记二

1.查找HTML元素 通常,通过 JavaScript,您需要操作HTML 元素. 为了做到这件事情,您必须首先找到该元素.有三种方法来做这件事: 通过id找到HTML元素(本例查找 id="intro" 元素) var x=document.getElementById("intro"); 通过标签名找到HTML元素(本例查找 id="main" 的元素,然后查找 "main" 中的所有 <p> 元素) var

JavaScript学习笔记二:在HTML中使用JS

1. <script>元素的6个属性:async.defer.charset.language.src.type. 其中只有src最为常用,其他的使用缺省值即可. 2. 通过<script>元素引用外部文件示例: 1 <script src="example.js"></script> 注: a. 为了符合html规范以及浏览器的兼容性,尽量不要写成下面的样式. 1 <script src="example.js"

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本

公益图书馆-学习笔记二

1.在视图中显示控制器变量. 在控制其中为变量赋值即可,如 $this->info_user=$user;然后在视图中可直接使用. 2.html显示数组使用 volist标签 <volist name="info_user" id="vo"> {$vo.username} {$vo.email}即可使用数组里的键值对 3.隐藏button <button type="submit" style="display:

【Unity 3D】学习笔记二十七:unity游戏脚本(七)

使用C#编写游戏脚本 在前面提到,unity支持三种语言编写脚本:js,C#,boo.入门的时候建议只用js,因为js比较简单易懂,语法也不是很严格.但后来晋级的时候推荐使用C#,因为它比较符合unity的编程思想,执行效率更高.下面总结下怎么使用C#编写脚本. 继承MonoBehaviour类 在unity中,任何一个脚本,包括上述三种语言都需要去继承MonoBehaviour这个类.为什么我们之前写JS代码的时候没有继承咧?因为在创建JS代码的时候,系统会将其类名与继承关系隐藏起来. 在pr

AJax 学习笔记二(onreadystatechange的作用)

AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了onreadyStateChange事件实现这一功能.这类似于回调函数的做法.onreadyStateChange事件可指定一个事件处理函数来处理XMLHttpRequest对象的执行结果,如: 复制代码 代码如下: ajaxObj=createAjaxObject(); var url="/MyTod