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. 一次服务器CPU占用率高的定位分析

    现象: 当前项目启动一段时间,有一个服务导致CPU使用率持续超过30% 环境:Windows 7,  CPU: 8核, 内存: 8g内存 定位过程: 启动项目,查看Java进程ID 查看Event P ...

  2. https_request请求接口返回数据

    定义一个https_request方法 <?php function https_request($url, $data = null) { $curl = curl_init(); curl_ ...

  3. Yii2 自定义Gii生成代码模板

    我们使用一个例子来介绍如何定制代码模板.假设我们想要定制由 model 生成器生成的代码. 我们首先创建一个名为 protected/gii/model/templates/customer 的目录. ...

  4. SQLite 入门教程(四)增删改查,有讲究 (转)

    转于: SQLite 入门教程(四)增删改查,有讲究 一.插入数据 INSERT INTO 表(列...) VALUES(值...) 根据前面几篇的内容,我们可以很轻送的创建一个数据表,并向其中插入一 ...

  5. jsp+urlrewrite实现html分页简单粗暴实现

    今天去检查一同事写的一分页实现,看了有点郁闷,都说了要换成html实现方便搜索引擎收录,他还是用的js,真是晕.还得帮他解决 好吧.言归正传,我在他的基础上粗暴的修改了下,达到了基本的效果,带数字分页 ...

  6. 【OpenCV十六新手教程】OpenCV角检测Harris角点检测

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...

  7. android80 HttpClient框架提交数据 get方式

    package com.itheima.httpclient; import java.io.IOException; import java.io.InputStream; import java. ...

  8. java的一些程序

    1.文件读取并打印 import java.io.*;public class readandprint{//*********Found********public static void main ...

  9. 查找字符串(C++实现)

    查找字符串(C++实现),不使用库函数: // SubString.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...

  10. Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

    1. 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了 2.  代码示例: (1)SendThread.java,如下: package com.himi.udpDemo2; ...