《JavaScript高级程序设计 第3版》-学习笔记-3
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 "<";
break;
case ">":
return ">";
break;
case "&":
return "&";
break;
case "\"":
return """;
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的更多相关文章
- JavaScript高级程序设计第三版学习笔记(一)之数据类型区分详谈
null.NaN.undefined三者的区别是什么? 在初次接触到JavaScript的时候,傻傻的分不清null.NaN.undefined三者到底区别何在,在实际的项目开发中也因为这个问题而困惑 ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- javascript权威指南第6版学习笔记
javascript权威指南第6版学习笔记 javascript数组.函数是特殊对象 看一点少一点. 3.1.4 hello.js内容是 var x=.3-.2;var y=.2-.1 console ...
- JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One
JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One JavaScript 高级程序设计 (第4版) 思维导图下载 JavaScript 高级程序设计 (第4版) 脑图 ...
- 《JavaScript高级程序设计》(第二版)
这本书的作者是 Nicholas C.Zakas ,博客地址是 http://www.nczonline.net/ ,大家可以去多关注,雅虎的前端工程师,是YUI的代码贡献者,可想而知这本书得含金量, ...
- 《JavaScript高级程序设计 第3版》-学习笔记-2
P31-P82页 1.相等不相等与全等不全等 相等不相等:先转换后比较.对于只有一个对象,调用valueOf方法得到基本类型值再按基本类型转换:如果两个都是对象,则比较他们是否是同一个对象(引用或指针 ...
- 《JavaScript高级程序设计 第3版》-学习笔记-1
P1-P30页 1.<script>标签的属性 async:async(html) | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行 ...
- 再次精读《javascript高级程序设计第3版》学习笔记(1)
第一次拿起这本书是2016年暑假,时隔2年,又一次开始研读这本经典书籍.每次读,都是对之前的一次沉淀和总结,每次都会有新的收获.
随机推荐
- Altium Designer6打印PCB 设置
1.File-->Page Setup Printer Paper一栏是打印纸的设置,不再罗嗦. 主要是Scaling一栏:ScaleMode项选择:ScaledPrint ...
- Nginx具体的压缩配置
以下是自学it网--中级班上课笔记 网址:www.zixue.it 常用以下配置 gzip on|off gzip_buffers 4K|8K 缓冲(和硬盘块相当) gzip_comp_level [ ...
- []cp,转载]提示MyEclipse Trial Expired,如何手动获取MyEclipse 注册码!很牛!
1.建立JAVA Project,随便命名,只要符合规则就行. 2.在刚刚建好的Project右击src,新建一个类,命名为MyEclipseGen,把.java里本来有的代码全部删掉,再把下面的代码 ...
- HTML快速参考
HTML 模版 html> <head> <meta charset="utf-8"/> <title>html template< ...
- Android中shape属性详解
一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标签怎么用. 1.新建shape文件 首先在res/drawable文件夹下,新建一个文件,命名为:shape_radius.x ...
- Spring-接口调用
在Spring框架下实现和调用接口时,不用再代码中创建接口对象.而是依赖容器注入接口的实现对象. 1.创建接口 package service; /** * Created by xumao on 2 ...
- 【转】Android Camera(五)使用Camera功能 AREA的理解
http://blog.csdn.net/think_soft/article/details/7998478 使用Camera功能 大多数的Camera功能都是使用Camera.Parameters ...
- PHP超级全局变量总结
silicon1985 的 重要的PHP超级全局变量总结 PHP有9个提前定义变量数组.分别总结例如以下: 1.$_SERVER $_SERVER超级全局变量包括由webserver创建的信息.它提供 ...
- 底部菜单栏(三)Fragment+FragmentTabHost实现仿新浪微博底部菜单栏
一.实现效果图 二.项目工程结构 三.详细代码编写 1.主tab布局界面,main_tab_layout: 双击代码全选 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- PureMVC(JS版)源码解析(十一):Model类
这篇博文讲PureMVC三个核心类——Model类.Model类的构造函数及工厂函数[即getInstance()方法]和View类.Controller类是一样的,这里就不重复讲解了,只 ...