JavaScript高级程序设计(读书笔记)(五)

前端开发 作者: 2024-08-25 20:00:01
本笔记汇总了作者认为“JavaScript高级程序设计”这本书的前七章知识重点,仅供参考。第五章 引用类型 小结: 对象在JavaScript中被称为引用类型的值,而且有一些内置的引用类型可以用来创建特定的对象,现简要总结如下: 引用类型与传统面向对象程序设计中的类相似,但实现不

第5章 援用类型


var person = new Object(); person.name = "Nicholas"; person.age = 29;
var person = { name : "Nicholas",age : 29 };
alert(person["name"]); //"Nicholas" alert(person.name); //"Nicholas"

var colors = new Array();//空数组 var colors = new Array(20);//创建1个包括3项的数组 var colors = new Array("red","blue","green");//创建1个包括3个字符串值的数组 var names = Array("Greg");//创建1个包括1个字符串值的数组
var colors = ["red","green"];//创建1个包括3个字符串的数组 var names = [];//创建1个空数组 var values = [1,2,];//忌讳,会创建1个包括2或3项的数组 var options = [,];//忌讳,会创建1个包括5或6项的数组
if (value instanceof Array) { //对数组履行某些操作 }
if (Array.isArray(value)) { //对数组履行某些操作 }

栈方法和队列方法

  • push(): 栈中项插入
  • pop():栈中项移除
  • push():向数组末端添加项
  • shift():从数组前段获得项

重排序方法

function compare(value1,value2) { if (value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; } }
var values = [0,1,5,10,15]; values.sort(compare); alert(values); //0,15
function compare(value1,value2) { return value2 - value1; }

操作方法

var colors = ["red","green","blue"]; var colors2 = colors.concat("yellow",["black","brown"]; alert(colors); //red,green,blue alert(colors2); //red,blue,yellow,black,brown
var colors = ["red","yellow","purple"]; var colors2 = colors.slice(1); var colors3 = colors.slice(1,4); alert(colors2); //green,purple alert(colors3); //green,yellow
  • 删除:可以删除任意数量的项, 只需指定两个参数:要删除的第1项的位置和要删除的项数。例如,splice(0,2)会删除数组中的前两项。
  • 插入:可以向指定位置插入任意数量的项,只需提供3个参数:起始位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第4、第5,乃至任意多个项。例如splice(2,"red","green")会从当前数组的位置2开始插入字符串”red”和”green”。
  • 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需提供3个参数:起始位置、要删除的项数和要插入的项。如果要插入多个项,可以再传入第4、第5,乃至任意多个项。例如splice(2,1,"green")会删除当前数组位置2的项,然后再从当前数组的位置2开始插入字符串”red”和”green”。
var colors = ["red","blue"]; var removed = colors.splice(0,1); //删除第1项 alert(colors); //green,blue alert(removed); //red,返回的数组中只包括1项 removed = colors.splice(1,0,"orange"); //从位置1开始插入两项 alert(colors); //green,orange,blue alert(removed); //返回的是1个空数组 removed = colors.splice(1,"red","purple"); //插入两项,删除1项 alert(colors); //green,red,purple,blue alert(removed); //yellow,返回的数组中只包括1项

位置方法

var person = { name: "Nicholas" }; var people = [{ name: "Nicholas" }]; var morePeople = [person]; alert(people.indexOf(person)); //⑴ alert(morePeople.indexOf(person)); //0

迭代方法

  • every():对数组中的每项运行给定函数,如果该函数对每项都返回true,则返回true。
  • some():对数组中的每项运行给定函数,如果该函数对任1项返回true,则返回true。
  • filter():对数组中的每项运行给定函数,返回该函数会返回true的项组成的数组。
  • forEach():对数组中的每项运行给定函数。这个方法没有返回值。
  • map():对数组中的每项运行给定函数,返回每次函数调用的结果组成的数组。
var numbers = [1,3,4,1]; var everyResult = numbers.every(function(item,index,array) { return (item > 2); }); alert(everyResult); //false var someResult = numbers.some(function(item,array) { return (item > 2); }); alert(someResult); //true
var numbers = [1,1]; var filterResult = numbers.filter(function(item,array) { return (item > 2); }); alert(filterResult); //[3,4,5,3]
var numbers = [1,1]; var mapResult = numbers.filter(function(item,array) { return item * 2; }); alert(mapResult); //[2,6,8,10,2]
var numbers = [1,1]; numbers.forEach(function(item,index,array) { //履行某些操作 });

归并方法

var values = [1,5]; var sum = values.reduce(function(prev,cur,array) { return prev + cur; }); alert(sum); //15
var now = new Date()
  • “月/日/年“,如6/13/2004;
  • “英文月名 日,年”,如January 12,2004;
  • “英文星期几 英文月名 日 年 时:分:秒 时区”,如Tue May 25 2004 00:00:00 GMT-0700。
  • ISO 8601 扩大格式 YYYY-MM-DDTHH:mm:ss.sssZ(例如 2004-05⑵5T00:00:00)。只有兼容ECMAScript5的实现支持这类格式。
var someDate = new Date(Date.parse("May 25,2004"));
//GMT时间2000年1月1日午夜零时 var y2k = new Date(Date.UTC(2000,0)); //GMT时间2005年5月5日下午5:55:55 var allFives = new Date(Date.UTC(2005,17,55,55));
  • toDateString()——以特定于实现的格式显示星期几、月、日和年;
  • toTimeString()——以特定于时间的格式显示时、分、秒和时区;
  • toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年;
  • toLocaleTimeString()——以特定于实现的格式显示时、分、秒;
  • toUTCString()——以特定于实现的格式显示完全的UTC日期。
var expression = / pattern / flags ;
  • g:表示全局模式(global),即模式将被用于所有字符串,而非在发现第1个匹配项是立即停止;
  • i:表示不辨别大小写(case-insensitive)模式,即在肯定匹配项是疏忽模式与字符串的大小写;
  • m:表示多行(multiline)模式,即在到达1行文本末尾时还会继续查找下1行中是不是存在与模式匹配的项。
//使用函数声明 alert(sum(10,10)); function sum(num1,num2) { return num1 + num2; }
//使用函数表达式 alert(sum(10,10)); var sum = function(num1,num2) { return num1 + num2; }
//函数声明 function addSomeNumber(num) { return num + 100; } function addSomeNumber(num) { return num + 200; } var result = addSomeNumber(100); //300
var addSomeNumber = function (num) { return num + 100; }; addSomeNumber = function (num) { return num + 200; }; var result = addSomeNumber(100); //300
//函数作为参数 function callSomeFunction (someFunction,someArgument) { return somFunction (someArgument); } function add10 (num) { return num + 10; } var result1 = callSomeFunction (add10,10); alert(result1); //20 function getGreeting (name) { return "Hello," + name; } var result2 = callSomeFunction (getGreeting,"Nicholas"); alert(result2); //"Hello,Nicholas"
function createComparisonFunction (propertyName) { return function (object1,object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; } }; }
var data = [{name: "Zachary",age: 28},{name: "Nicholas",age: 29}]; data.sort(createComparisonFunction("name")); alert(data[0].name); //Nicholas data.sort(createComparisonFunction("age")); alert(data[0].name); //Zachary
//与函数名牢牢耦合 function factorial (num) { if (num <= 1) { return 1; } else { return num * factorial (num - 1) } } //使用arguments.callee替换函数名,消除耦合 function factorial (num) { if (num <= 1) { return 1; } else { return num * arguments.callee (num - 1) } }
var trueFactorial = factorial; factorial = function () { return 0; }; alert(trueFactiorial(5)); //120 alert(factorial(5)); //0
window.color = "red"; var o = { color: "blue"}; function sayColor() { alert(this.color); } sayColor(); //"red" o.sayColor = sayColor; o.sayColor(); //"blue"
function sum(num1,num2) { return num1 + num2; } function callSum1(num1,num2) { return sum.apply(this,arguments); //传入arguments对象 } function callSum2(num1,[num1,num2]); //传入数组 } alert(callSum1(10,10)); //20 alert(callSum2(10,10)); //20
function sum(num1,num2) { return num1 + num2; } function callSum(num1,num2) { return sum.call(this,num1,num2); } alert(callSum(10,10)); //20
window.color = "red"; var o = { color: "blue" }; function sayColor() { alert(this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window); //red sayColor.call(o); //blue
window.color = "red"; var o = { color: "blue" }; function sayColor() { alert(this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); //blue
var s1 = "some text"; var s2 = s1.substring(2);
  1. 创建String类型的1个实例;
  2. 在实例上调用指定的方法;
  3. 烧毁这个实例。
var s1 = new String("some text"); var s2 = s1.substring(2); s1 = null;

Boolean类型

Number类型

String类型

var StringObject = "hello world"; alert(StringObject .slice(3)); //输出 "lo world" alert(StringObject .substring(3)); //输出 "lo world" alert(StringObject .substr(3)); //输出 "lo world" alert(StringObject .slice(3,7)); //输出 "lo w" alert(StringObject .substring(3,7)); //输出 "lo w" alert(StringObject .substr(3,7)); //输出 "lo worl"
var StringObject = "hello world"; alert(StringObject .slice(-3)); //输出 "rld" alert(StringObject .substring(-3)); //输出 "hello world" alert(StringObject .substr(-3)); //输出 "rld" alert(StringObject .slice(3,-4)); //输出 "lo w" alert(StringObject .substring(3,-4)); //输出 "hel" alert(StringObject .substr(3,-4)); //输出 "" 空字符串
var stringValue = "Lorem ipsum dolor sit amet,consectetur adipisicing elit"; var positions = new Array(); var pos = stringValue.indexOf("e"); while (pos > -1) { positions.push(pos); pos = stringValue.indexOf("e",pos + 1); } alert(positions); //"3,24,32,35,52"
var text = "cat,bat,sat,fat"; var pattern = /.at/; //与pattern.exec(text)相同 var matches = text.match(pattern); alert(matches.index); //0 alert(matches[0]); //"cat" alert(pattern.lastIndex); //0
var text = "cat,fat"; var pos = text.search(/at/); alert(pos); //1
var text = "cat,fat"; var result = text.replace("at","ond"); alert(result); //"cond,sond,fond"
字符序列 替换文本
$$ $
$& 匹配全部模式的子字符串。与RegExp.lastMatch的值相同
$’ 匹配的子字符串之前的子字符串。与RegExp.leftContext的值相同
$` 匹配的子字符串之前的子字符串。与RegExp.rightContext的值相同
$n 匹配第n个捕获组的子字符组,其中nn等于0~9。例如,$1是匹配第1个捕获组的子字符串,$2是匹配第2个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串
$nn 匹配第nn个捕获组的子字符串,其中nn等于01~99。例如$01是匹配第1个捕获组的子字符串,$02是匹配第2个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串
var text = "cat,fat"; result = text.replace(/(.at)/g,"word ($1)"); alert(result); //word (cat),word (bat),word(sat),word (fat)
\\返回html实体 function htmlEscape(text) { return text.replace(/[<>"&]/g,function(match,pos,originalText) { switch(match) { case "<": return "&lt;"; case ">": return "&gt;"; case "&": return "&amp;"; case "\"": return "&quot;" } }); } alert(htmlEscape("<p class=\"greeting\">Hello world!</p>")); //&lt;p class=&quot;greeting&quot;&gt;Hello world!&lt;/p&gt;
var colorText = "red,yellow"; var colors1 = colorText.split(","); //["red","yellow"] var colors2 = colorText.split(",",2); //["red","blue"] var colors3 = colorText.split(/[^\,]+/); //["",",""]
  • 如果字符串在字母表中应当排在字符串参数之前,则返回1个负数(大多数情况下是⑴,具体的值要视实现而定);
  • 如果字符串等于字符串参数,则返回0;
  • 如果字符串在字母表中应当排在字符串参数以后,则返回1个正数(大多数情况下是1,具体的值一样要使实现而定)。
var stringValue = "yellow"; alert(stringValue.localeCompare("brick")); //1 alert(stringValue.localeCompare(
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68573.html