MDN文档基础知识搜集

Array数组,一种允许你存储多个值在一个引用里的结构。var myVariable = [1,'Bob','Steve',10];
引用数组的元素只需:myVariable[0]myVariable[1], 等等.

发布工具: FTP 客户端

你还需要一种将文件从本地硬盘上传到远程Web服务器的方法。 为了做到这一点,你必须使用FTP客户端。

每个系统都包含一个FTP客户端作为文件管理器的一部分。 Windows资源管理器,Nautilus(一个常见的Linux文件管理器)和Mac Finder都包含该功能。 然而,人们更经常选择专门的FTP客户端,可以存储密码并且并行显示本地和远程目录。

如果你需要安装一个FTP客户端,这里有很多免费的选择:例如, 可以全平台使用的 FileZilla , windows上使用的WinSCP , Mac和 windows上都能使用的 Cyberduck ,还有很多)。

注意:还有其他方法可以在远程服务器上发布内容,如rsync和git,但并不像FTP那样简单,我们不会在这里讨论。(一定看git教程!!)

使用在线工具如 GitHub 或 Google App Engine

有一些工具能使你在线发布网站 :

  • GitHub 是一个“社交编程”网站。它允许你上传代码库并储存在 Git 版本控制系统里。 然后你可以协作代码项目,系统是默认开源的,意味着世界上任何人都可以找到你 GitHub 上的代码。去使用 GitHub,从中学习并且提高自己吧! 你也可以对别人的代码那样做! 这是一个非常重要、有用的社区,而且 Git/GitHub 是非常流行的 version control system — 大部分科技公司在工作中使用它。 GitHub 有一个非常有用的特点叫 GitHub pages,允许你将网站代码放在网上。
  • Google App Engine

不像大部分其它主机服务,这类工具通常是免费的,不过你只能使用有限的功能。

使用像 Thimble 的基于 Web 的集成开发环境

有许多web应用能够仿真一个网站开发环境,允许你输入 HTML、CSS 和 JavaScript 然后显示代码的结果 —— 全部在一个标签页里!通常这些工具都很简单,对学习很有帮助,而且是免费的(基本功能),它们在一个独特的地址显示你提交的网页。不过,基础功能是很有限的,而且这些应用通常不提供如图像的内容的主机空间。

使用一下以下几种工具,看看你最喜欢哪一个:

  • JSFiddle
  • Thimble
  • JSBin
  • CodePen

 通过GitHub发布简单。

现在,让我们通过Github页面告诉你公布的你的代码是如此的

  1. 首先, 注册一个GitHub账号, 并确认你的邮箱地址。
  2. 接下来,你需要创建一个新的资源库( repository )来存放你的文件。
  3. 在这个页面上,在 Repository name 输入框里输入  username.github.io,username 是你的用户名。比如,我们的朋友 bobsmith 会输入  bobsmith.github.io。同时勾选 Initialize this repository with a README ,然后点击 Create repository
  4. 然后,将你的网页文件夹拖拽到你的资源库( repository ),再点击 Commit changes 。

    提示: 确保你的文件夹有一个 index.html 文件.

  5. 现在将你的浏览器转到 username.github.io 来在线查看你的网站。比如,如果用户名为chrisdavidmills, 请转到 chrisdavidmills.github.io。

    提示: 你的网站可能需要几分钟的时间才能投入使用。 如果它不能立即工作,你可能需要等待几分钟,然后再试一次。

想要了解更多,请看 GitHub Pages Help.


关于变量命名的规则

你可以给你的变量赋任何你喜欢的名字,但有一些限制。 一般你应当坚持使用拉丁字符(0-9,a-z,A-Z)和下划线字符。

  • 你不应当使用规则之外的其他字符,因为它们可能引发错误,或对国际用户来说难以理解。
  • 变量名不要以下划线开头—— 以下划线开头的被某些JavaScript设计为特殊的含义,因此可能让人迷惑。
  • 变量名不要以数字开头。这种行为是不被允许的,并且将引发一个错误。
  • 一个可靠的命名约定叫做 "小写驼峰命名法",用来将多个单词组在一起,小写整个命名的第一个字母然后大写剩下单词的首字符。我们已经在文章中使用了这种命名方法。
  • 让变量名直观,它们描述了所包含的数据。不要只使用单一的字母/数字,或者长句。
  • 变量名大小写敏感——因此myage与myAge是2个不同的变量。
  • 最后也是最重要的一点—— 你应当避免使用JavaScript的保留字给变量命名。保留字,即是组成JavaScript的实际语法的单词!因此诸如 varfunctionlet和 for等,都不能被作为变量名使用。浏览器将把它们识别为不同的代码项,因此你将得到错误。

Note: 你能从词汇语法—关键字找到一个相当完整的保留关键字列表来避免使用关键字当作变量。

好的命名示例:

age
myAge
init
initialColor
finalOutputValue
audio1
audio2

差的命名示例:

1
a
_12
myage
MYAGE
var
Document
skjfndskjfnbdskjfb
thisisareallylongstupidvariablenameman

现在尝试创建更多的变量,请将上面的指导泯记于心。


有用的字符串方法(记住,字符串本值是不可变的!,你要另外把变化后的值赋给新的变量)

数组(数组可变)

事件介绍

JavaScript事件代理

JavaScript 事件委托 以及jQuery对事件委托的支持

Event delegation

适合初学者的JavaScript面向对象

对象原型

JavaScript 中的继承

使用JSON 

客户端 Web API(未完!,翻译!)

从服务器获取数据

语法和数据类型

流程控制与错误处理

函数

箭头函数


delete

delete操作符,删除一个对象或一个对象的属性或者一个数组中某一个键值。语法如下:

delete objectName;
delete objectName.property;
delete objectName[index];
delete property; // legal only within a with statement

objectName是一个对象名,property 是一个已经存在的属性,index是数组中的一个已经存在的键值的索引值。

第四行的形式只在with声明的状态下是合法的, 从对象中删除一个属性。

你能使用 delete 删除各种各样的隐式声明, 但是被var声明的除外。

如果 delete 操作成功,属性或者元素会变成 undefined。如果 delete可行会返回true,如果不成功返回false

x = 42;
var y = 43;
myobj = new Number();
myobj.h = 4;    // create property h
delete x;       // returns true (can delete if declared implicitly)
delete y;       // returns false (cannot delete if declared with var)
delete Math.PI; // returns false (cannot delete predefined properties)
delete myobj.h; // returns true (can delete user-defined properties)
delete myobj;   // returns true (can delete if declared implicitly)

 


void

void 运算符运用方法如下:

void (expression)
void expression

void运算符,表明一个运算没有返回值。expression是javaScript表达式,括号中的表达式是一个可选项,当然使用该方式是一种好的形式。

你可以使用void运算符指明一个超文本链接。该表达式是有效的,但是并不会在当前文档中进行加载。

如下创建了一个超链接文本,当用户单击该文本时,不会有任何效果。

<a href="javascript:void(0)">Click here to do nothing</a>

下面的代码创建了一个超链接,当用户单击它时,提交一个表单。

<a href="javascript:void(document.form.submit())">
Click here to submit</a>

 

in

in操作符,如果所指定的属性确实存在于所指定的对象中,则会返回true,语法如下:

propNameOrNumber in objectName

在这里 propNameOrNumber可以是一个代表着属性名的字符串或者是一个代表着数组索引的数值表达式,而objectName则是一个对象名。

下面的例子是 in 操作的常见用法。

// Arrays
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees;        // returns true
3 in trees;        // returns true
6 in trees;        // returns false
"bay" in trees;    // returns false (you must specify the index number,// not the value at that index)
"length" in trees; // returns true (length is an Array property)// Predefined objects
"PI" in Math;          // returns true
var myString = new String("coral");
"length" in myString;  // returns true// Custom objects
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar;  // returns true
"model" in mycar; // returns true

 

左值表达式

左值可以作为赋值的目标。

new

你可以使用new operator 创建一个自定义类型或者是预置类型的对象实例。用法如下:

var objectName = new objectType([param1, param2, ..., paramN]);

super

super 关键字可以用来调用一个对象父类的函数,它在用来调用一个类的父类的构造函数时非常有用,比如:

super([arguments]); // calls the parent constructor. super.functionOnParent([arguments]);

 

扩展语句

扩展语句符允许一个表达式在原地展开, 当需要多个参数 (比如函数调用时) 或者多个值(比如字面量数组) 。

例如:现在你有一个数组,你想创建一个新数组,并将刚才那个作为它的一部分,用array的字面语法是不够的,你不得不写一些代码实现它,比如用些pushspliceconcat等等。但是用spread syntax就没问题了:

var parts = ['shoulder', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes'];

类似的,扩展语句也可以用在函数调用的时候:

function f(x, y, z) { }
var args = [0, 1, 2];
f(...args);

数字对象

内置的Number对象有一些有关数字的常量属性,如最大值、不是一个数字和无穷大的。你不能改变这些属性,但可以按下边的方式使用它们:

<span style="color:#333333"><code class="language-html">var biggestNum = Number.MAX_VALUE;
var smallestNum = Number.MIN_VALUE;
var infiniteNum = Number.POSITIVE_INFINITY;
var negInfiniteNum = Number.NEGATIVE_INFINITY;
var notANum = Number.NaN;</code></span>

你永远只用从Number对象引用上边显示的属性,而不是你自己创建的Number对象的属性。

下面的表格汇总了数字对象的属性:

数字的属性

属性描述
Number.MAX_VALUE可表示的最大值
Number.MIN_VALUE可表示的最小值
Number.NaN特指”非数字“
Number.NEGATIVE_INFINITY特指“负无穷”;在溢出时返回
Number.POSITIVE_INFINITY特指“正无穷”;在溢出时返回
Number.EPSILON

表示1和比最接近1且大于1的最小Number之间的差别

Number.MIN_SAFE_INTEGERJavaScript最小安全整数.
Number.MAX_SAFE_INTEGERJavaScript最大安全整数.
数字的方法
方法描述
Number.parseFloat()把字符串参数解析成浮点数,
和全局方法 parseFloat() 作用一致.
Number.parseInt()

把字符串解析成特定基数对应的整型数字,和全局方法 parseInt() 作用一致.

Number.isFinite()判断传递的值是否为有限数字。
Number.isInteger()判断传递的值是否为整数。
Number.isNaN()判断传递的值是否为 NaN. More robust version of the original global isNaN().
Number.isSafeInteger()判断传递的值是否为安全整数。

数字的类型提供了不同格式的方法以从数字对象中检索信息。以下表格总结了 数字类型原型上的方法。

数字类型原型上的一些方法
方法描述
toExponential()返回一个数字的指数形式的字符串,形如:1.23e+2
toFixed()

返回指定小数位数的表示形式,

var a=123,b=a.toFixed(2)//b="123.00"

toPrecision()

返回一个指定精度的数字。如下例子中,a=123中,3会由于精度限制消失

var a=123,b=a.toPrecision(2)//b="1.2e+2"


Math的方法

方法描述
abs()绝对值
sin()cos()tan()标准三角函数;参数为弧度
asin()acos()atan()atan2()反三角函数; 返回值为弧度
sinh()cosh()tanh()双曲三角函数; 返回值为弧度.
asinh()acosh()atanh()反双曲三角函数;返回值为弧度.

pow()exp()expm1()log10()log1p()log2()

指数与对数函数
floor()ceil()返回最大/最小整数小于/大于或等于参数
min()max()

 

返回一个以逗号间隔的数字参数列表中的较小或较大值(分别地)

random()返回0和1之间的随机数。
round()fround()trunc(),四舍五入和截断函数
sqrt()cbrt()hypot()

平方根,立方根,平方参数的和的平方根 

两个参数平方和的平方根

sign()数字的符号, 说明数字是否为正、负、零。
clz32(),
imul()

在32位2进制表示中,开头的0的数量.

返回传入的两个参数相乘结果的类C的32位表现形式

和其他对象不同,你不能够创建一个自己的Math对象。你只能使用内置的Math对象。

 


日期对象

JavaScript没有日期数据类型。但是你可以在你的程序里使用 Date 对象和其方法来处理日期和时间。Date对象有大量的设置、获取和操作日期的方法。 它并不含有任何属性。

JavaScript 处理日期数据类似于Java。这两种语言有许多一样的处理日期的方法,也都是以1970年1月1日00:00:00以来的毫秒数来储存数据类型的。

Date 对象的范围是相对距离 UTC 1970年1月1日 的前后 100,000,000 天。

创建一个日期对象:

<span style="color:#333333"><code class="language-html">var dateObjectName = new Date([parameters]);</code></span>

这里的 dateObjectName 对象是所创建的Date对象的一个名字,它可以成为一个新的对象或者已存在的其他对象的一个属性。

不使用 new 关键字来调用Date对象将返回当前时间和日期的字符串

前边的语法中的参数(parameters)可以是一下任何一种:

  • 无参数 : 创建今天的日期和时间,例如: today = new Date();.
  • 一个符合以下格式的表示日期的字符串: "月 日, 年 时:分:秒." 例如: var Xmas95 = new Date("December 25, 1995 13:30:00")。如果你省略时、分、秒,那么他们的值将被设置为0。
  • 一个年,月,日的整型值的集合,例如: var Xmas95 = new Date(1995, 11, 25)。
  • 一个年,月,日,时,分,秒的集合,例如: var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);.

Date对象的方法

处理日期时间的Date对象方法可分为以下几类:

  • "set" 方法, 用于设置Date对象的日期和时间的值。
  • "get" 方法,用于获取Date对象的日期和时间的值。
  • "to" 方法,用于返回Date对象的字符串格式的值。
  • parse 和UTC 方法, 用于解析Date字符串。

通过“get”和“set”方法,你可以分别设置和获取秒,分,时,日,星期,月份,年。这里有个getDay方法可以返回星期,但是没有相应的setDay方法用来设置星期,因为星期是自动设置的。这些方法用整数来代表以下这些值:

  • 秒,分: 0 至 59
  • 时: 0 至 23
  • 星期: 0 (周日) 至 6 (周六)
  • 日期:1 至 31 
  • 月份: 0 (一月) to 11 (十二月)
  • 年份: 从1900开始的年数

例如, 假设你定义了如下日期:

var Xmas95 = new Date("December 25, 1995");

Then Xmas95.getMonth() 返回 11, and Xmas95.getFullYear() 返回 1995.

getTime 和 setTime 方法对于比较日期是非常有用的。getTime方法返回从1970年1月1日00:00:00的毫秒数。

例如,以下代码展示了今年剩下的天数:

var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 设置日和月,注意,月份是0-11
endYear.setFullYear(today.getFullYear()); // 把年设置为今年
var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒数
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //返回今年剩下的天数

这个例子中,创建了一个包含今天的日期的Date对象,并命名为today,然后创建了一个名为endYear的Date对象,并把年份设置为当前年份,接着使用每天的毫秒数和getTime分别获取今天和年底的毫秒数,计算出了今天到年底的天数,最后四舍五入得到今年剩下的天数。

parse方法对于从日期字符串赋值给现有的Date对象很有用,例如:以下代码使用parse和setTime分配了一个日期值给IPOdate对象:

var IPOdate = new Date();
IPOdate.setTime(Date.parse("Aug 9, 1995"));

例子:

在下边的例子中,JSClock()函数返回了用数字时钟格式的时间:

function JSClock() {var time = new Date();var hour = time.getHours();var minute = time.getMinutes();var second = time.getSeconds();var temp = "" + ((hour > 12) ? hour - 12 : hour);if (hour == 0)temp = "12";temp += ((minute < 10) ? ":0" : ":") + minute;temp += ((second < 10) ? ":0" : ":") + second;temp += (hour >= 12) ? " P.M." : " A.M.";return temp;
}

JSClock函数首先创建了一个叫做time的新的Date对象,因为没有参数,所以time代表了当前日期和时间。然后调用了getHoursgetMinutes以及getSeconds方法把当前的时分秒分别赋值给了hourminute,second。

接下来的4句在time的基础上创建了一个字符串,第一句创建了一个变量temp,并通过一个条件表达式进行了赋值,如果小时大于12,就为 (hour - 12), 其他情况就为 hour, 除非 hour 为 0, 这种情况下,它会变成 12.

接下来的语句拼接了minute的值到temp后。如果minute小于10,条件表达式就会在minute前边加个0,其他情况下加一个分号。然后按同样的方式在temp后拼接上了秒。

最后,如果hour是12或者更大,条件表达式会在temp后拼接"P.M.",否则拼接"A.M." 。

 


国际化转换时间及日期(Intl.DateTimeFormat是根据语言来格式化日期和时间的对象的构造器)

国际化数字转换(Intl.NumberFormat是对语言敏感的格式化数字类的构造器类

字符串


String对象方法

方法 描述 charAtcharCodeAtcodePointAt 返回字符串指定位置的字符或者字符编码。 indexOflastIndexOf 分别返回字符串中指定子串的位置或最后位置。 startsWithendsWithincludes 返回字符串是否以指定字符串开始、结束或包含指定字符串。 concat 连接两个字符串并返回新的字符串。 fromCharCodefromCodePoint 从指定的Unicode值序列构造一个字符串。这是一个String类方法,不是实例方法。 split 通过将字符串分离成一个个子串来把一个String对象分裂到一个字符串数组中。 slice 从一个字符串提取片段并作为新字符串返回。 substringsubstr 分别通过指定起始和结束位置,起始位置和长度来返回字符串的指定子集。 matchreplacesearch 通过正则表达式来工作. toLowerCasetoUpperCase

分别返回字符串的小写表示和大写表示。

normalize 按照指定的一种 Unicode 正规形式将当前字符串正规化。 repeat 将字符串内容重复指定次数后返回。 trim 去掉字符串开头和结尾的空白字符。


多行模板字符串

模板字符串是一种允许内嵌表达式的String字面值. 可以用它实现多行字符串或者字符串内插等特性.

模板字符串使用反勾号 (` `) (grave accent) 包裹内容而不是单引号或双引号. 模板字符串可以包含占位符. 占位符用美元符号和花括号标识 (${expression}).

多行

源代码中插入的任何新行开始字符都作为模板字符串的内容. 使用一般的字符串时, 为了创建多行的字符串不得不用如下语法:

console.log("string text line 1\n\
string text line 2");
// "string text line 1
// string text line 2"

为了实现同样效果的多行字符串, 现在可以写成如下形式:

console.log(`string text line 1
string text line 2`);
// "string text line 1
// string text line 2"

嵌入表达式

为了在一般的字符串中嵌入表达式, 需要使用如下语法:

var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
// "Fifteen is 15 and
// not 20."

现在, 使用模板字符串, 可以使用语法糖让类似功能的实现代码更具可读性:

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."

更多信息, 请阅读 JavaScript reference 中的 Template strings。


索引集合类 (Indexed collections)

 

数组的方法(array methods)

Array 对象具有下列方法:

concat() 连接两个数组并返回一个新的数组。

var myArray = new Array("1", "2", "3");
myArray = myArray.concat("a", "b", "c"); 
// myArray is now ["1", "2", "3", "a", "b", "c"]

join(deliminator = ',') 将数组的所有元素连接成一个字符串。

var myArray = new Array("Wind", "Rain", "Fire");
var list = myArray.join(" - "); // list is "Wind - Rain - Fire"

push() 在数组末尾添加一个或多个元素,并返回数组操作后的长度。

var myArray = new Array("1", "2");
myArray.push("3"); // myArray is now ["1", "2", "3"]

pop() 从数组移出最后一个元素,并返回该元素。

var myArray = new Array("1", "2", "3");
var last = myArray.pop(); 
// myArray is now ["1", "2"], last = "3"

shift() 从数组移出第一个元素,并返回该元素。

var myArray = new Array ("1", "2", "3");
var first = myArray.shift(); 
// myArray is now ["2", "3"], first is "1"

unshift() 在数组开头添加一个或多个元素,并返回数组的新长度。

var myArray = new Array ("1", "2", "3");
myArray.unshift("4", "5"); 
// myArray becomes ["4", "5", "1", "2", "3"]

slice(start_index, upto_index) 从数组提取一个片段,并作为一个新数组返回。

var myArray = new Array ("a", "b", "c", "d", "e");
myArray = myArray.slice(1, 4); // starts at index 1 and extracts all elements// until index 3, returning [ "b", "c", "d"]

splice(index, count_to_remove, addElement1, addElement2, ...)从数组移出一些元素,(可选)并替换它们。

var myArray = new Array ("1", "2", "3", "4", "5");
myArray.splice(1, 3, "a", "b", "c", "d"); 
// myArray is now ["1", "a", "b", "c", "d", "5"]
// This code started at index one (or where the "2" was), 
// removed 3 elements there, and then inserted all consecutive
// elements in its place.

reverse() 颠倒数组元素的顺序:第一个变成最后一个,最后一个变成第一个。

var myArray = new Array ("1", "2", "3");
myArray.reverse(); 
// transposes the array so that myArray = [ "3", "2", "1" ]

sort() 给数组元素排序。

var myArray = new Array("Wind", "Rain", "Fire");
myArray.sort(); 
// sorts the array so that myArray = [ "Fire", "Rain", "Wind" ]

sort() 也可以带一个回调函数来决定怎么比较数组元素。这个回调函数比较两个值,并返回3个值中的一个:

例如,下面的代码通过字符串的最后一个字母进行排序:

var sortFn = function(a, b){if (a[a.length - 1] < b[b.length - 1]) return -1;if (a[a.length - 1] > b[b.length - 1]) return 1;if (a[a.length - 1] == b[b.length - 1]) return 0;
}
myArray.sort(sortFn); 
// sorts the array so that myArray = ["Wind","Fire","Rain"]
  • 如果 a 小于 b ,返回 -1(或任何负数)
  • 如果 a 大于 b ,返回 1 (或任何正数)
  • 如果 a 和 b 相等,返回 0。

indexOf(searchElement[, fromIndex]) 在数组中搜索searchElement 并返回第一个匹配的索引。

var a = ['a', 'b', 'a', 'b', 'a'];
console.log(a.indexOf('b')); // logs 1
// Now try again, starting from after the last match
console.log(a.indexOf('b', 2)); // logs 3
console.log(a.indexOf('z')); // logs -1, because 'z' was not found

lastIndexOf(searchElement[, fromIndex]) 和 indexOf 差不多,但这是从结尾开始,并且是反向搜索。

var a = ['a', 'b', 'c', 'd', 'a', 'b'];
console.log(a.lastIndexOf('b')); // logs 5
// Now try again, starting from before the last match
console.log(a.lastIndexOf('b', 4)); // logs 1
console.log(a.lastIndexOf('z')); // logs -1

forEach(callback[, thisObject]) 在数组每个元素项上执行callback

var a = ['a', 'b', 'c'];
a.forEach(function(element) { console.log(element);} ); 
// logs each item in turn

map(callback[, thisObject]) 在数组的每个单元项上执行callback函数,并把返回包含回调函数返回值的新数组(译者注:也就是遍历数组,并通过callback对数组元素进行操作,并将所有操作结果放入数组中并返回该数组)。

var a1 = ['a', 'b', 'c'];
var a2 = a1.map(function(item) { return item.toUpperCase(); });
console.log(a2); // logs A,B,C

filter(callback[, thisObject]) 返回一个包含所有在回调函数上返回为true的元素的新数组(译者注:callback在这里担任的是过滤器的角色,当元素符合条件,过滤器就返回true,而filter则会返回所有符合过滤条件的元素)。

var a1 = ['a', 10, 'b', 20, 'c', 30];
var a2 = a1.filter(function(item) { return typeof item == 'number'; });
console.log(a2); // logs 10,20,30

every(callback[, thisObject]) 当数组中每一个元素在callback上被返回true时就返回true(译者注:同上,every其实类似filter,只不过它的功能是判断是不是数组中的所有元素都符合条件,并且返回的是布尔值)。

function isNumber(value){return typeof value == 'number';
}
var a1 = [1, 2, 3];
console.log(a1.every(isNumber)); // logs true
var a2 = [1, '2', 3];
console.log(a2.every(isNumber)); // logs false

some(callback[, thisObject]) 只要数组中有一项在callback上被返回true,就返回true(译者注:同上,类似every,不过前者要求都符合筛选条件才返回true,后者只要有符合条件的就返回true)。

function isNumber(value){return typeof value == 'number';
}
var a1 = [1, 2, 3];
console.log(a1.some(isNumber)); // logs true
var a2 = [1, '2', 3];
console.log(a2.some(isNumber)); // logs true
var a3 = ['1', '2', '3'];
console.log(a3.some(isNumber)); // logs false

以上方法都带一个被称为迭代方法的的回调函数,因为他们以某种方式迭代整个数组。都有一个可选的第二参数 thisObject,如果提供了这个参数,thisObject 变成回调函数内部的 this 关键字的值。如果没有提供,例如函数在一个显示的对象上下文外被调用时,this 将引用全局对象(window).

实际上在调用回调函数时传入了3个参数。第一个是当前元素项的值,第二个是它在数组中的索引,第三个是数组本身的一个引用。 JavaScript 函数忽略任何没有在参数列表中命名的参数,因此提供一个只有一个参数的回调函数是安全的,例如 alert 。

reduce(callback[, initialValue]) 使用回调函数 callback(firstValue, secondValue) 把数组列表计算成一个单一值(译者注:他数组元素两两递归处理的方式把数组计算成一个值)

var a = [10, 20, 30];
var total = a.reduce(function(first, second) { return first + second; }, 0);
console.log(total) // Prints 60

reduceRight(callback[, initalvalue]) 和 reduce()相似,但这从最后一个元素开始的。

reduce 和 reduceRight 是迭代数组方法中最不被人熟知的两个函数.。他们应该使用在那些需要把数组的元素两两递归处理,并最终计算成一个单一结果的算法。

使用类数组对象(array-like objects)

一些 JavaScript 对象, 例如 document.getElementsByTagName() 返回的 NodeList 或者函数内部可用的 arguments 对象,他们表面上看起来,外观和行为像数组,但是不共享他们所有的方法。arguments 对象提供一个 length 属性,但是不实现 forEach() 方法, 例如:

Array的原生(prototype)方法可以用来处理类似数组行为的对象,例如: :

function printArguments() {Array.prototype.forEach.call(arguments, function(item) {console.log(item);});
}

Array的常规方法也可以用于处理字符串,因为它提供了序列访问字符转为数组的简单方法:

Array.prototype.forEach.call("a string", function(chr) {console.log(chr);
});

数组和正则表达式

当一个数组作为字符串和正则表达式的匹配结果时,该数组将会返回相关匹配信息的属性和元素。 RegExp.exec()String.match() 和 String.split() 的返回值是一个数组。 使用数组和正则表达式的的更多信息, 请看 Regular Expressions.


带键的集合

使用对象

对象模型的细节

继承与原型链

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-cli生成项目时你应当知道的

一、安装 npm install -g vue-cli二、创建项目 vue init 模板名 项目名 vue init webpack mymall模板名: 1 . webpack 最常用 2 . webpack-simple // 一个简单webpackvue-loader的模板&#xff0c;不包含其他功能。 3 . browserify // 一个全面的Browserifyvueify 的模板&am…

es6 --- 正确获取Generator函数内部的this对象使其可以使用new

首先看2个例子 function * g() {this.a 11; }let o g(); console.log(o.a);可以看见Generator函数里面的this指向的对象取不出来. 再看下一个例子: function* F() {yield this.x 2;yield this.y 3; } new F();可以看出Generator函数无法使用new操作符, 下面一共一个解决…

mysql三-3:完整性约束

阅读目录 一 介绍二 not null与default三 unique四 primary key五 auto_increment六 foreign key七 作业一 介绍 约束条件与数据类型的宽度一样&#xff0c;都是可选参数 作用&#xff1a;用于保证数据的完整性和一致性主要分为&#xff1a; PRIMARY KEY (PK) 标识该字段为该…

es6 --- 对任意对象部署可遍历接口

有时候需要对对象进行遍历,下面提供一个比较方便的接口, 其基本思路是,首先得到对象的所有键(key), 然后将其放在yield* 后面. yield* 可以通过 for … of … 循环遍历 具体实现如下: function* iterEntries (obj) {let keys Object.keys(obj);for ( let i 0; i < keys.…

element-ui表单验证:用户名、密码、电话、邮箱

之前设计login组件时增加了简单的表单验证&#xff0c;因此对应的users组件&#xff0c;添加用户功能也必须设置相应的验证规则。 文档form表单验证只提供了用户名/密码&#xff0c;是否必须/长度限制的验证。对于电话、邮箱和地址的验证如下&#xff1a; html部分&#xff0c…

前端解析返回的对象时json显示$ref问题的解决

在mapper中写的语句&#xff0c;结果集中association&#xff0c;采用的一个对象&#xff0c;整个list列表中每个元素有一个对象元素&#xff0c;如果第二个元素中有一个与第一个元素中对象同名的&#xff0c;就会去引用上一个元素的地址&#xff0c;在json前台解析的时候就不会…

微信小程序模仿开眼视频app(一)——视频首页、视频详情、分类

可到我的github账号上去copy文件 先展示一下我实现了的功能吧 提示&#xff0c;如果有出现无法加载域名之类问题的的&#xff0c;可以在“设置”-“项目设置”-打钩“不校验合法域名……”&#xff1b; 或者直接登录自己的微信小程序后台设置域名信息 首页部分&#xff1a; 1…

es6 --- Thunkify源码分析

首先看一个例子:读取package.json下的文件,并将读取的数据(若读取失败)打印出来 // 导入fs和thunkify模块 var thunkify require(thunkify); var fs require(fs);// 定义读取文件的函数read var read thunkify(fs.readFile);// 调用read函数读取package.json下的文件.并对数…

(转)C# WebApi 身份认证解决方案:Basic基础认证

原文地址&#xff1a;http://www.cnblogs.com/landeanfen/p/5287064.html 阅读目录 一、为什么需要身份认证二、Basic基础认证的原理解析 1、常见的认证方式2、Basic基础认证原理三、Basic基础认证的代码示例 1、登录过程2、/Home/Index主界面3、WebApiCORS验证部分&#xff08…

ZNZD平台vue项目

一、安装配置node.js 1.1 配置企业级软件仓库 1&#xff09;首先用的是Nexus Repository Manager搭建npm私服&#xff1b;&#xff08;待补充&#xff09; 2&#xff09;项目使用修改.npmrc文件来修改源 现在需要做的就是修改源&#xff01;采取配置npmrc文件的方式&#x…

微信小程序模仿开眼视频app(二)——搜索功能

微信小程序模仿开眼视频app&#xff08;一&#xff09;有介绍首页、视频详情和分类部分 可到我的github账号上去copy文件 搜索部分 一开始没想要设置历史记录啊、热门搜索啊这些的&#xff0c;只是想把搜索框弄好看一点&#xff0c;无意中发现了微信官方ui库&#xff1a;weu…

设计模式(六)------设计模式六大原则(5):迪米特法则

转载自&#xff1a;http://www.jianshu.com/p/14589fb6978e &#xff08;作者简书&#xff1a;涅槃1992&#xff09; 揭秘迪米特法则 迪米特法则&#xff08;Law of demeter,缩写是LOD&#xff09;要求&#xff1a;一个对象应该对其他对象保持最少了解&#xff0c; 通缩的讲就是…

http://www.cda.cn/view/25735.html

通过实例浅析Python对比C语言的编程思想差异 我一直使用 Python&#xff0c;用它处理各种数据科学项目。 Python 以易用闻名。有编码经验者学习数天就能上手&#xff08;或有效使用它&#xff09;。 听起来很不错&#xff0c;不过&#xff0c;如果你既用 Python&#xff0c;同时…

前端知识点梳理(一)

一、HTML 1. meta标签 记住2个属性&#xff1a;name和http-equiv name&#xff1a;描述网页 <meta name"参数" content"具体的描述">http-equiv&#xff1a;文件头 HTML中的meta标签及其使用方法 二、CSS 1. css实现水平居中的几种方式 css实…

Babel 7 基础入门学习(详细版)

可以在我的GitHub上下载示例代码。 前言 之前一直想要系统的学习一下Babel的使用规则&#xff0c;看过阮一峰老师的《Babel基础入门》&#xff0c;无奈此教程是2016年出的&#xff0c;而Babel 7都已经出来啦&#xff0c;于是&#xff0c;在搜集了各种资料后&#xff0c;关于…

Kubernetes学习之路(四)之Node节点二进制部署

K8S Node节点部署 1、部署kubelet &#xff08;1&#xff09;二进制包准备 [rootlinux-node1 ~]# cd /usr/local/src/kubernetes/server/bin/ [rootlinux-node1 bin]# cp kubelet kube-proxy /opt/kubernetes/bin/ [rootlinux-node1 bin]# scp kubelet kube-proxy 192.168.56.1…

前端知识点梳理(二)

1.内核 浏览器内核&#xff08;Rendering Engine&#xff09;最初分为&#xff1a;渲染引擎&#xff08;layout engineer&#xff09;或&#xff08;Rendering Engine&#xff09;和js引擎&#xff1b;后来 JS 引擎越来越独立&#xff0c;内核就倾向于单指渲染引擎。浏览器she…

微信小程序模仿开眼视频app(三)——信息卡片瀑布流和分类

《微信小程序模仿开眼视频app&#xff08;一&#xff09;——视频首页、视频详情、分类》 《微信小程序模仿开眼视频app&#xff08;二&#xff09;——搜索功能》 可到我的github账号上去copy文件 瀑布流部分 文件代码提示的挺详细的&#xff0c;这里主要点一下 社区与分类…

javascript --- typeof方法和instanceof方法

ES5中: 原始类型包括:Number、String、Boolean、Null、Undefined 原始封装类型包括:Number、String、Boolean 引用类型包括:Array、Function、RegExp、Error、Date、Error 变量对象 原始类型的实例成为原始值,它直接保存在变量对象中. 引用类型的实例成为引用值,它作为一个指针…

《JavaScript 高级程序设计》笔记 第1~5章

第1章 js是专为网页交互而设计的脚本语言&#xff0c;由3部分组成&#xff1a; ECMAScript&#xff0c;提供核心语言功能DOM文档对象模型&#xff0c;提供访问和操作网页内容的方法和接口BOM浏览器对象模型&#xff0c;提供与浏览器交互的方法和接口 js是一种脚本语言、解释…