P84-P137页,

这一章看的真久,这个月事太多了。有些内容在代码注释里没提出来了

1、JS强大的数组类型,元素类型任意,提供了非常多的操作数组的方法和属性

 /*
数组类型
*/ //stack
var colors = ['red','blue'];
colors.push('brown');
console.log(colors);
console.log(colors.length);
var item = colors.pop();
console.log(item);
console.log(colors); //队列
colors = [];
var count = colors.push('red','green');
console.log(count);
console.log(colors);
count = colors.push('black');
console.log(count);
item = colors.shift();
console.log(item);
console.log(colors);
console.log(colors.length); //pop 与 unshift搭配可以实现反向队列 //重新排序
var values = [1,2,3,4,5,6];
values.reverse();
console.log(values); values = [0,1,5,10,15];
values.sort();//sort方法默认进行字符串比较,即调用toString方法比较结果
console.log(values); //为了实现自定义排序,可以这样
function comp(var1,var2){
return var1 - var2;
} values.sort(comp);
console.log(values); /*
数组操作方法
*/ //数组复制合并
var colors1 = ['red','green','blue'];
var colors2 = colors1.concat('yellow',['black','brown']);
console.log(colors1);
console.log(colors2); //slice方法,这个方法的操作不会影响原来的数组
colors = ['red','green','blue','yellow','purple'];
colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
console.log(colors2);
console.log(colors3); //splice方法,最强的数组操作方法
//删除
colors.splice(0,2);//要删除的第一项的位置和要删除的项数
console.log(colors);
//插入
colors.splice(2,0,'red','green');//起始位置、0(要删除的项)和要插入的项-‘red’,‘green’
console.log(colors);
//替换
colors.splice(2,1,'white');//起始位置,删除项数,插入项
console.log(colors);
//这个方法的返回值是被删除的数组,如果没有删除,返回一个空数组 console.log(colors.indexOf('green'));
console.log(colors.lastIndexOf('green')); //数组迭代方法
//every,都返回ture才返回true
numbers = [1,2,3,4,5,4,3,2,1];
var everyRes = numbers.every(function(val,index,arr){
return (val > 2);
});
console.log(everyRes); //some,只要有一项为true,则结果为true
var someRes = numbers.some(function(val,index,arr){
return val > 2;
});
console.log(someRes); //filter,返回该函数会返回true的项构成的数组
var filterRes = numbers.filter(function(val ,index,arr){
return val > 2;
});
console.log(filterRes); //map,返回函数调用结果形成的数组;
var mapRes = numbers.map(function(val,index,arr){
return val * 2;
});
console.log(mapRes); //forEach,这个方法没有返回值
numbers.forEach(function(val,index,arr){
//执行操作
});

Array Demo Code

2、Date类型

 /*
Date类型
*/ var now = new Date();
console.log(now); var someDate = new Date(Date.parse('May 25,2005'));//与new Date('May 25,2005)等价
console.log(someDate); var y2k = new Date(Date.UTC(2012,5,8));//2012年6月8日
console.log(y2k); var start = Date.now();
start = +new Date();//这样是为不支持Date.now的浏览器兼容,把Date对象转换成字符串 //日期类支持大于小于操作符
console.log(now > start); //日期格式化
var date = new Date(); console.log(date.toLocaleDateString());//2015-03-29;
console.log(date.getFullYear()+'...'+(date.getMonth()+1)+'...'+date.getDate());

Date Demo Code

3、强大的正则类型

 /*
RegExp类型
*/ var exp = /^\d+$/ig;//必须转义(\)的元字符 ( [ { \ ^ $ | ) ? * + . ] }
console.log(exp.test('12324234a')); var expEmail = /^\w+@\w+\.\w+\.?\w*$/i;
console.log(expEmail.test('lvyahui8@126.com'));
console.log(expEmail.test('lvyahui8@126.com.'));
console.log(expEmail.test('lvyahui8@126.com.cn'));
console.log(expEmail.test('lvyahui8@126.co-'));
var expEmail2 = new RegExp('^\\w+@\\w+\\.\\w+\\.?\\w*$','i');
console.log(expEmail2.test('lvyahui8@126.com'));
console.log(expEmail2.test('lvyahui8@126.com.'));
console.log(expEmail2.test('lvyahui8@126.com.cn'));
console.log(expEmail2.test('lvyahui8@126.co-')); //exec方法
var text = 'mom and dad and baby';
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
console.log(matches.index);
console.log(matches.input);
console.log(matches[0]);
console.log(matches[1]);
console.log(matches[2]); text = 'cat, bat, sat, fat';
pattern = /.at/;
matches = pattern.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern.lastIndex); matches = pattern.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern.lastIndex); pattern = /.at/g;
matches = pattern.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern.lastIndex); matches = pattern.exec(text);
console.log(matches.index);
console.log(matches[0]);
console.log(pattern.lastIndex);

RegExp Demo Code

4、函数类型,函数类型也是对象,也有属性和方法

 /*
Function 类型
*/ function sum(num1,num2){
return num1+num2;
}
var sum2 = function(num1,num2){
return num1+num2;
}; var otherName = sum2;
console.log(otherName(3,2)); //函数并不能重载的根本原因在于函数名只是个指针,重新申明一个函数只是修改了函数指针的值
function factorial(num){
if(num<=1){
return 1;
}
else{
return num * arguments.callee(num-1);//将函数的执行过程与函数名解耦
}
}
/*
window.color = 'red';
var o = {color:'blue'};
function sayColor(){
console.log(this.color);
}
sayColor();//'red' 当在网页的全局作用域调用函数时,t在该函数里,this对象指向window
o.sayColor = sayColor;
o.sayColor();//'blue'
//函数名只是个指针,全局sayCOlor和o.sayCOlor指向的是同一个函数
*/
function sayName(name){}
function cp(a,b){}
function pt(){}
console.log(sayName.length);//
console.log(cp.length);//
console.log(pt.length);// /*
函数属性和方法
*/ //属性,length,prototype function person(name,age){
this.name = name;
this.age = age;
function getName(){
return this.name;
}
} console.log(person.length);//
console.log(person.prototype);//{} //function apply,call
function callSum1(num1,num2){
return sum.apply(this,arguments);
} function callSum2(num1,num2){
return sum.apply(this,[num1,num2]);
} function callSum3(num1,num2){
return sum.call(this,num1,num2);
} console.log(callSum1(10,10));//因为在全局作用域中调用,所以
console.log(callSum2(10,10));
console.log(callSum3(10,10)); var o = {color:'blue'}; function sayColor(){
console.log(this.color);
} //这里输出为undefined 是因为当前运行环境不在浏览器,也就是不在window的作用域,this指针并不指向window
console.log(this); //{}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red sayColor.call(o); //blue //bind方法
var window = {color:'red'};
var o = {color:'blue'}; function sayColor(){
console.log(this.color);
} var objSayColor = sayColor.bind(o);
objSayColor();

Function Demo Code

5、基本包装类型

 /*
基本包装类型
*/ //String
var s1 = 'come.text';
var s2 = s1.substring(2);
//使用new关键字创建的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类的对象,
//则只存在于一行代码的执行瞬间,然后立刻被销毁,所以不能动态为基本类型值添加属性和方法
s1 = 'come text';
s1.color = 'red';
console.log(s1.color);//undefined var obj = new Object('some test');
console.log(obj instanceof String);//true //注意,使用new 调用构造函数与直接调用同名的转型函数是不一样的
var value = '25';
var number = Number(value);
console.log(typeof number);//number var obj = new Number(value);
console.log(typeof obj);//object //--Boolean
var falseObj = new Boolean(false);
var result = falseObj && true; console.log(result); var falseValue = false;
result = falseValue && true;
console.log(result); console.log(typeof falseObj);//object
console.log(typeof falseValue);
console.log(falseObj instanceof Boolean);
console.log(falseValue instanceof Boolean); //--Number
var numberObject = new Number(10);
console.log(numberObject.toString());//
console.log(numberObject.toString(2));//
console.log(numberObject.toString(8));//
console.log(numberObject.toString(16));//a
console.log(numberObject.toFixed(2));
//如果长度过长,以最大接近小数位进行舍入
console.log((new Number(10.0047)).toFixed(2));//10.00
console.log((new Number(10.005)).toFixed(2));//10.01
//String
var strValue = "我是lvyahui";
console.log(strValue.length); //即使是双字节字符也算一个字符 console.log('String Start');
//String 类型
//模式匹配
//match方法,找到第一个匹配的
var text = "hello world,lvyahui";
var pattern = /.l/;
var matches = text.match(pattern);
console.log(matches.index);//
matches.every(function(i){
console.log(i);
});
console.log(pattern.lastIndex);// //search 方法,返回第一个匹配字符串的位置
var pos = text.search(/l/);
console.log(pos);
//replace 方法,两个参数,如果第一个参数是字符串的话,只会替换第一个字符。要想替换所有的字符串,必须使用正则
text = "hello,this is 15$,you &mi"
var repRes = text.replace(/l/g,"w");
console.log(repRes);
repRes = text.replace(/(l)/g,"w $1");
console.log(repRes); function htmlEscpae(text){
return text.replace(/[<>"&]/g,function(match,pos,originalText){
switch (match) {
case "<":
return "&lt;";
break;
case ">":
return "&gt;";
break;
case "&":
return "&amp;";
break;
case "\"":
return "&quot;";
break;
}
});
} console.log(htmlEscpae("<p class=\"greeting\">hello world!</p>")); var colorText = "red,blur,,green,yellow";
var c1 = colorText.split(",");
var c2 = colorText.split(",",2);//指定数组的大小
var c3 = colorText.split(/[^\,]/);
console.log(c1);
console.log(c2);
console.log(c3);

在所有JS代码执行之前就存在两个内置对象Global和Math对象,不能直接访问Global对象,但Web浏览器中window对象承担了该角色

《JavaScript高级程序设计 第3版》-学习笔记-3的更多相关文章

  1. JavaScript高级程序设计第三版学习笔记(一)之数据类型区分详谈

    null.NaN.undefined三者的区别是什么? 在初次接触到JavaScript的时候,傻傻的分不清null.NaN.undefined三者到底区别何在,在实际的项目开发中也因为这个问题而困惑 ...

  2. JavaScript高级程序设计第三版-读书笔记(1-3章)

    这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript   提供核心语言功能 DOM     提供访问 ...

  3. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  4. javascript权威指南第6版学习笔记

    javascript权威指南第6版学习笔记 javascript数组.函数是特殊对象 看一点少一点. 3.1.4 hello.js内容是 var x=.3-.2;var y=.2-.1 console ...

  5. JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One

    JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One JavaScript 高级程序设计 (第4版) 思维导图下载 JavaScript 高级程序设计 (第4版) 脑图 ...

  6. 《JavaScript高级程序设计》(第二版)

    这本书的作者是 Nicholas C.Zakas ,博客地址是 http://www.nczonline.net/ ,大家可以去多关注,雅虎的前端工程师,是YUI的代码贡献者,可想而知这本书得含金量, ...

  7. 《JavaScript高级程序设计 第3版》-学习笔记-2

    P31-P82页 1.相等不相等与全等不全等 相等不相等:先转换后比较.对于只有一个对象,调用valueOf方法得到基本类型值再按基本类型转换:如果两个都是对象,则比较他们是否是同一个对象(引用或指针 ...

  8. 《JavaScript高级程序设计 第3版》-学习笔记-1

    P1-P30页 1.<script>标签的属性 async:async(html)  | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行 ...

  9. 再次精读《javascript高级程序设计第3版》学习笔记(1)

    第一次拿起这本书是2016年暑假,时隔2年,又一次开始研读这本经典书籍.每次读,都是对之前的一次沉淀和总结,每次都会有新的收获.

随机推荐

  1. 8-11-Exercise

    链接:第四次小练 A.POJ 3094   Quicksum 水题中的水题啊~ 直接上代码: #include <iostream> #include <cstdio> #in ...

  2. ReactiveCocoa框架学习1

    写block直接使用inline block的声明类型 在ARC中使用strong,如果不使用strong,则会被销毁 在非ARC中使用copy block在开发中的使用场景 把block保存到对象中 ...

  3. PHP如何取出数组最后一个元素?

    <?php $array=array("first","sencond","third"); #1.echo end($array); ...

  4. Yii 安装二维码扩展Qrcode

    比如要添加 https://github.com/2amigos/yii2-qrcode-helper 生成二维码的 这个扩展第一种方法 :    1.打开根目录的composer.json, 在re ...

  5. Java 8 新特性概述

    Oracle 在 2014 年 3 月发布了 Java 8 正式版,该版本是一个有重大改变的版本,对 JAVA 带来了诸多新特性.其中主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作 ...

  6. 开源的连接池技术DBCP和C3P0

    概述: Sun公司约定: 如果是连接池技术,需要实现一个接口! javax.sql.DataSource;   相关jar包和资料下载 1.1  DBCP连接池: l  DBCP 是 Apache 软 ...

  7. struts2标签汇总

    要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码:<%@taglib prefix="s" uri="/struts- ...

  8. JAAS LOGIN IN WEBLOGIC SERVER--reference

    The Java Authentication and Authorization Service (JAAS) is a standard extension to the security in ...

  9. Oracle 根据业务创建新的用户

    新的需求,创建一个用户,可以查询基表的数据,但是不能修改,同时自己也可以创建对象 1.创建用户第一种方式 详细常见,前提 表空间和临时表空间必须存在 格式: create user 用户名 ident ...

  10. 在DropDownList里显示多级分类

    protected void ddlBind() { DataTable dt = new DataTable(); ddlCategoryId.DataSource = getList(" ...