javascript核心读具有意义的类型、值和变量。
Javascript的数据分为两类:原始类(原始类型)和对象类型(对象类型)。
在Javascript中原有的课程包括数字、字符串、布尔值,本章还单列一章专门为数字、字符串、布尔值和javascript.javascript也有两个特殊的原始值,null(空)和不确定性(魏丁一)。它们不是数字、字符串、布尔值,它们分别代表它们的特殊类型的唯一成员。
Javascript是比其他的数字,一个对象的字符串,布尔值,null,和不确定的。一个对象(对象)是一个集属性(属性),每个属性是由一个名/值对(一个值可以是原始值,如一个数字、字符串,或一个对象),一个特殊的对象(全局对象)将推出的第五小姐,和第六部分将进行更详细的描述)。
常见的Javascript对象是非需要组命名values.javascript还定义了一种特殊的对象,数组(数组),它代表一组有序的编号values.javascript定义数组独家语法。阵中有一些特定的行为属性,不同于普通的物体。
Javascript也定义了一个特殊的对象,一个函数。函数是一个可执行的代码,它要与功能关联运行代码并返回操作的结果对象,数组一样,功能性行为特征是没有其他objects.javascript定义了使用函数的特殊语法相同的Javascript。功能。最重要的是,他们是真正的价值,和Javascript可以被视为普通的对象。
如果一个函数初始化(使用new运算符)一个新的对象,我们称它为一个构造函数(constructor)。每个构造函数定义了一组(类)对象的构造函数初始化对象,类可以被看作是对象类型的亚型。除了数组(数组)类和函数(函数)类,Javascript还定义了三个其他类的使用。日期(日期)的定义,表示日期的对象。定期(正则表达式)定义了一个正则表达式对象。错误类定义了表示运行时错误和Javascript程序语法错误对象的线。你可以定义类,你需要定义自己的构造函数。
Javascript解释器有自己的内存管理机制,可以自动回收内存(垃圾)。这意味着程序可以创建对象的需求,程序员不必担心这些对象的内存回收的破坏。当没有更多的参考指向一个对象,解释器知道对象不使用,然后自动回收内存资源占用。
Javascript是一种面向对象的语言,不严格地说,这意味着我们没有全局定义的函数的不同价值类型的操作,数据类型本身可以定义方法(方法)的使用价值,例如,在一个元素的数组排序,不需要包括一种()函数,而是一种调度方法()
A.sort(); / /排序(一)面向对象的版本
从技术上讲,只有Javascript对象可以有一个方法。但是,数字、字符串、布尔值也有自己的方法。在Javascript中,只有null和未定义值是不能有方法的值。
Javascript的类型可分为原始类型和对象类型,可分为能不能有方法和类型,也可分为可变和不可变类型,变量类型的值可以修改,对象和数组变量类型:Javascript程序可以改变对象的属性值和数组元素的值。
Numbers, Boolean values, null, and undefined belong to the type that cannot be changed.For example, it is impossible to modify the content of an array itself.A string can be seen as an array of characters, and you can think that it can be changed.In Javascript, however, the string is immutable.The text of any location of a string can be accessed, but Javascript does not provide a way to modify the text content of the string.
Javascript是免费进行数据类型的转换。例如,如果一个数是用来在一个程序将使用一个字符串,Javascript会自动把数字转换为字符串。如果布尔值预计将用在布尔值使用Javascript将会相应地在Javascript。,一个灵活的划痕变化规律型等于判断(平等)
Javascript的变量类型(类型),和自由变量可以给人和类型,使用var关键字来声明(声明)variables.javascript使用的语法范畴,在任何函数声明的变量称为全局变量(全局变量)。它在Javascript程序中随处可见。
1。数
不像其他的编程语言,Javascript不区分整数和浮点数之间。在Javascript中的值是由浮点数表示的数。当一个数直接出现在Javascript程序,我们叫陈直接数字量(数字文字),Javascript支持各种格式的多个直接数字量。(注:直接在任何数加减号(-)可以得到他们的负)但减是一元否定。这不是数字直接语法的一部分。)
整数直接量
在Javascript中,十进制整数数组由数组序列表示。
除了十进制整数直接量,Javascript也指出十六机制的价值(16)为基础,所谓的十六是一个前缀0x或0x 十六数值是0-9字母之间的信(一)F(F)的表达量。10-15的字母A-F是十六-直接量例带整数。
复制代码代码如下所示:
0xff / / 15 * 16 + 15 = 255
0xcafe911
虽然ECMAscript不支持八进制直接量,Javascript的一些实例可以让一个整数是八进制(基数为8)的形式,直接从一个八进制数的0,其次是由一些0-7序列。
复制代码代码如下所示:
0377 3 * 64 + 7 * 8 + 7 = 255(十进制)
因为一些Javascript实现支持八进制数之间的数量,有些不支持它。因此,最好不要在0前缀之间使用整数。毕竟,我们不知道目前支持Javascript实现八进制的决议。在ecmascript6严格的模式,对八直接量是禁止的。
II。浮点直接量
浮点量可以包含小数点,它们使用传统实数法,实数由整数部分、小数点和小数部分组成。
此外,该指数的计算方法也可以用来表示浮点类型的直接量,真实的数字后面的字母e或E,其次是积极的和消极的,后面跟着一个整数索引。此计数法为代表的数值是前面的数乘以10的幂指数。
它可以用更简洁的语法表达。
复制代码代码如下所示:
{ } { } {数字。数字(E | e){ }数字}(+ | -)
三点一四
二千三百四十五点四五五
33333333333333333。
23平方6.02e23 / / 6.02 * 10
负23次1.255454e-23 / / 1.255454 * 10
在iii.javascript算术运算
Javascript程序使用省提供的语言中的算术运算符执行数字运算。
除了基本操作符之外,Javascript还支持更复杂的算术运算,这是由函数和常量作为数学对象的属性来实现的。
复制代码代码如下所示:
Math.pow(2, 53) / / = > 9007199254740992段(Math.pow(2,53))
math.round(。6) / / = > 1四RMS五
Math.ceil(6) / / = > 1以上
Math.floor(6) / / = > 0向下
Math.abs(5) / / = > 5绝对值
math.max(x,y,z) / /返回最大值。
Math.min(X,Y,Z) / /返回最小值
(数学,随机):生成大于0和小于1的伪随机数。
math.pi / PI
数学:e:自然对数的基
math.sqrt的平方根(3) / / 3
Math.pow(3, 1 / 3) / / 3的立方根
Math.sin(0) / /三角函数,和math.cos,math.atan等
math.log的自然对数(10) / / = > 2.302585092994046在底部的10
math.log(512) / / / 512 math.ln2登录基地2
math.log(100) / / / 100 math.ln10登录基地10
对math.exp三功率(3) / / E
Javascript算术上溢和下溢在(溢)(底流)或除以零是没有错的。但是数字运算的结果是在数字线(溢出),可以表示在Javascript中,其结果是一个特殊的无限价值(该)值。这是该Javascript表示。同样,当负数的值超出Javascript可以表达阴性范围,结果是负无穷大,在Javascript的-该表达,行为特征的无限价值,与我们的预期是一致的:根据自己的加、减计算结果,乘法和除法是无限的(保留牌子)
溢出(溢出)时,计算无线结果接近最小值时,他是一个孩子的情形发生到零,可以说比Javascript。当下溢负值时Javascript返回一个特殊值,负零(负零)和正常零几乎完全same.javascript程序员很少使用负零。
Javascript预定义的全局变量infinaty和南表示正无穷河非数字值。在ecmascipt3,这两个值可以读取和修改问题的written.ecmascript5定义其属性值的数量read-only.the定义的对象ecmascipt3也都是只读的,下面是一些例子:
复制代码代码如下所示:
无限 / / /读写该变量初始化
number.positive_infinity / /同样的价值,只看
1 0 这是相同的值
number.max_value + 1 / /结果或无穷大
number.negative_infinity / /表示负无穷大
无穷
- 1 0
-number.max_value - 1
南/读/写变量初始化
number.nan / /相同的值,但只
南方或0 0/的计算结果
数。min_value / / /下溢发生2。计算结果为0
数。min_value / / / 2负零
- 1。
- 0 负零
Javascript中的非数值是有点特殊的。它不等于人的价值,包括它本身。也就是说,它是不可能判断x南x = = nan.instead,你应该使用X!x确定当x是南时,表达式的结果是真的。功能。IsNaN()的行为类似。如果参数是南或非数字值(如字符串和对象),然后真的是returned.javascript具有类似的功能,需(),返回true。当参数不南,该,或无穷。
负零值也有点特殊,它等于正和负零(甚至使用严格的Javascript相等测试),这意味着除除数外,这两个值几乎相同。
复制代码代码如下所示:
var = 0;
无功negz = - 0;
零negz / / = >真的是等于零,负= = =
1 /零= 1 / / / negz假阳性和假阴性的无限范围
Iiii。二进制浮点数和四- SHE -五输入错误
有无数的实数,但Javascript只能用浮点数(确切地说是18437736874454810或627)的形式表示一个有限的数字,也就是说,当Javascript被使用实数时,它通常只是实际值的近似表示。
Javascript使用IEEE-754浮点数表示(几乎所有现代编程语言),这是一个二进制符号,能够准确地表达分数,如1 / 2,1 / 8和1 / 1024。不幸的是,我们经常使用分数,尤其是在财务计算方面,基于小数部分1 10, 1 100等,二进制表示法不代表一个简单的数字,如0.1。
Javascript中的数字有足够的精度,可以接近0.1,但事实上,这个数字不能用某些问题精确地表达出来。
复制代码代码如下所示:
var = 3 - 2;
var = 2 - 1;
警报(x = y) false两个值不相等
1 = 3。2不等于1。
1。2。= 1 = 1
由于舍入误差,0.3和0.2的区别之间实际上并不等于0.2和0.1之间的差异(在近似真实的模拟环境,0.3-0.2 = 0.099 9999999999999 8)。在Javascript中不仅存在这一问题,了解110:在任何使用二进制浮点编程语言都会有这样的问题,也要注意,在上面的代码中x和y的值非常接近对方,正确的价值观是重要的。这一计算的结果可以胜任大多数的计算任务。问题是,只有当这两个值相等或不。
Javascript的未来版本可能支持十进制数字类型来避免这个问题。在此之前,您可能更愿意使用大整数进行重要的财务计算,例如,您应该使用整数点而不是小数点进行基于货币单位的操作。
iiiii。日期和时间
Javascript语言的核心包括日期(构造函数),最初创建日期和时间的对象。这些日期对象提供了日期计算的简单API,日期对象不能是像数字这样的基本数据类型。
复制代码代码如下所示:
Var Zhen =新日期(2011, 0, 1);1月1日,2011
var稍后=新日期(2011, 0, 1,17, 10, 30);同一天
var现在是新的(日期);当前日期和时间
var =现在-甄;日期减法。计算时间间隔的毫秒数。
later.getfullyear(); / / = > 2011
later.getmonth(); / / = > 0计数从0月
later.getdate();, / / = > 1计数从1日数
later.getday(); / / = > 5得到一周的日子,0代表星期日,5代表1
later.gethours(当地时间) / / = >
(后来,getutchours)UTC / /小时,基于时区。
2。文本
一个字符串(string)是一种永恒的有序序列的16位的值,和每个角色通常是由一组characters.javascript表示Unicode字符串类型的文本,一个字符串的长度(长度)是,它包含16位值数,Javascript字符串的索引(和其从0开始的数组)的长度(空字符串)的一个空的字符串是0,和一个字符的字符类型不代表Javascript。代表一个16位的值,你只需要把它分配给一个字符串变量。这个字符串的长度是1。
字符集代码和Javascript字符串
Javascript使用UTF-16编码的Unicode字符集,以及Javascript字符串是由一组unordinal 16比特值序列。最常用的是16位编码的Unicode字符,代表字符串中的单个字符,不能被表示为一个16位Unicode字符的UTF-16编码规则,包括:两个序列的16位的值(也称为代理对)说,这意味着一个长度为2的Javascript字符串(两个16位值)可以代表一个Unicode字符。
复制代码代码如下所示:
Var P = Pi; / / PI by 16 0x03c0 code
var =E; / / 17码0x1d452
p.length / / = > 1包含一个16位的值
e.length / / = > 2 E的UTF-16编码后有两个值: ud835 udc52
各种字符串操作方法定义的Javascript的行为16位值,而不是字符,并且不处理剂对个别。相同的Javascript字符串的处理不规范,甚至不保证该字符串是一个合法的UTF-16格式
直接字符串
Javascript程序中字符串的直接量是一个由单引号或双引号括起来的字符序列。以单引号为界的字符串可以包含双引号,双引号的字符串也可以包含单个引号。
复制代码代码如下所示:
空字符串,0个字符
测试
3.14
名称=以下是我参考网上'''
你不喜欢o'reily的书
在ecmascript3,字符串文字量必须写在一行。在ecmascript5,字符串直接量可以分成几行。每一行必须以反斜杠。反斜杠和行结束符的字符串不能直接测量的内容。如果你想在一起,你可以使用转义字符。
注意,当使用单引号和字符串,需要在英语缩略语的小心和所有格式的写作,英语单引号和单引号是相同的字符,所以你必须使用反斜杠()来逃避。
二转义字符
在Javascript字符串,反斜杠()有一个特殊的目的。如果一个角色加入到反斜杠,它将不再显示其字面意义。例如,转义字符,它代表一个换行符。
复制代码代码如下所示:
◎O / / NUL字符
◎B /退格
水平选项卡
/ /换行
垂直选项卡
F /进纸
返回。
双引号
一个反斜杠
◎XXX两位和十六位数指定Latin-1字符
xxxxx Unicode字符指定的四位十六级XXXX
第三字符串的使用
一个Javascript内置函数是字符串连接操作符+作为一个字符串代表一个字符串connection.for例子
复制代码代码如下所示:
Hello+;
要确定字符串的长度——它包含的16位值的数目,可以使用长度属性,如字符串s的长度。
s.length
除了长度属性之外,字符串还提供了许多可以调用的方法。
复制代码代码如下所示:
您好,世界;
s.charat(0); / / H的第一个字符
s.charat(s.length - 1) / D的最后一个字符
s.substring(1, 4) / 魔法2-4个字
s.slice(1, 4) / /魔法同上
S.slice(3) / / 3个字符出现
该s.indexof首位(L ) / / 2特点
s.lastindexof的最后位置(我) / / 10特点
S.indexOf(L,3) / / 3位L字符第一次出现后
(s.split ) / / = > { 你好
更换(H
S.toUpperCase(你好,世界) / / = >
在Javascript中,字符串是固定的。类似的替换()和toUpperCase()方法返回新的字符串,和原来的人物本身并没有改变。
在ECMAscript,该特征可作为只读数组,除了要使用charAt()方法,也可以使用方括号来访问字符串中的单个字符(16位值)。
复制代码代码如下所示:
你好,世界
{ 0 }
s.length-1 }的{ / / = >D
火狐支持字符串索引的很久以前。大多数现代浏览器(IE除外)也跟随Mozailla的脚步。这个功能之前就已经完成的脚本。
四模式匹配
定义了RegExp()构造函数创建的文本模式匹配的对象,这些模式被称为正则表达式(常规、表达)Javascript Perl的正则表达式语法彩阳。字符串和正则表达式对象定义,使用正则表达式模式匹配、查找和替换功能。
RegExp对象不在语言的基本数据类型,如日期,这只是一个实用的API特殊对象。正则表达式的语法非常复杂,API是非常丰富的,它将详细说明在第十chapter.regexp是一个强大的和常用的文字处理工具,它是只是一个概述。
虽然不是在regexp语言的基本数据类型,他们仍然有一个直接的写作量,可直接用于Javascript。两斜线之间的文本构成一个正则表达式直接量。二斜线也可以按照一个或多个字母,它是用来修改匹配模式的意思。例如:
复制代码代码如下所示:
字符串,从html开始。
/ { 1-9 } { } * / / 0-9 /,一个非零的数,其次是任意数
/ bjavascript B /我/ / /,字Javascript,并忽略大小写
RegExp对象定义了一些有用的方法,和字符串也有办法接受regexp参数。例如:
复制代码代码如下所示:
var text =测试:1,2,3 ; / /样品
var模式,则都包含一个或多个数字示例。
Pattern.test(文本) / / = >真的,成功的
text.search(模式) / / = > 9:成功的第一个匹配的位置
text.match(模式) / / = > { 1
text.repeat(模式,# ); / / = >测试:#,#,#
text.split( / D / / /);= > {
三.布尔值
布尔值指true或false、打开或关闭,而该类型只有两个值,保留单词true或false。
Javascript中的比较语句的结果通常是布尔模糊的例子
= = 4
此代码用于检查变量a的值是否等于4。如果相等,则如果不相等值为false,则该值为true。
布尔值通常用于Javascript的控件语句中,如Javascript中的其他语句。如果布尔值为true,则执行第一段逻辑。如果我们执行另一个false代码,例如,
复制代码代码如下所示:
如果(a=4)
b=B+ 1;
其他的
a=1;
任何Javascript的值都可以转换成布尔值,下面的值被转换为false。
复制代码代码如下所示:
未定义
无效的
零
- 0
南
/空字符串
所有其他值,包括所有对象(数组),都将被转换为true、false和6个值,这些值可以在顶部转换为false。有时它被称为假值。当Javascript期望使用布尔值时,false值将被视为false,而真正的值将被视为真值。
看一个例子,加上变量o是一个对象或者一个null,if语句可以用来检测O是否是一个非空值。
如果(o)!= NULL)…
不同的运营商!= O和null的比较,结果为真或假。您可以首先忽略这里的比较语句,NULL是一个假值,对象是一个真值。
如果(o)…
对第一种情况,如果执行的代码后,只有当O不是空的,和第二条件没有那么严格,如果是只有当O不虚假或虚假的价值(如空的或不良的)。
布尔值包含ToString()方法,所以你可以使用该方法将字符串转换为真或假
| |算子,算子和一元运算符!执行布尔(非)操作,如果true返回false,则false值返回true,例如
复制代码代码如下所示:
如果((x = = 0 = = 0)| |!(z=0){
x和y是零,z是非零。
}
4.null和定义
NULL是Javascript语言的关键词。它代表一个特殊值null值,执行()操作类型为空,返回的对象,也就是说,空是一种特殊的对象的价值,意义是非对象。但事实上,零通常被认为是自由式的唯一成员。这说明数字、字符串和对象都是毫无价值的。大多数的编程语言有空以及Javascript,你可以熟悉零或零。
Javascript有一个空缺的二值。它是用来表示空值更深一层。它是一个变量的值,它表示变量未初始化。如果一个对象属性或数组元素的值返回到未定义的,它表示属性或元素不存在。定义是一个预定义的全局变量(它不是空的,也不是一个关键词),其价值是不确定的。如果你使用typeof来测试未定义的类型,你返回未定义值,表明这是这种类型的唯一成员。
虽然无效的定义是不同的,他们所代表的价值观的缺位,都是可以互换的。运算符= =等判断,两相等(使用严格的相等运算符=来区分他们)。那里的希望值是一个布尔类型,其值是false值。它类似于假。空和定义不包含任何属性和方法。实际上,和使用。用于访问成员或方法的两个值的{ }将产生类型错误。
您可能认为未定义的是在系统级别表示的,意外地存在类似的错误值空缺,NULL是表示级别、空缺的正常值或期望值,如果您想复制变量或属性,或者它们将作为参数传递给函数,null是最好的选择。
5。全局对象
前面的章节讨论了javascript类型的元素类型和原始值——对象类型——对象、数组和函数,但是有一个非常重要的对象类,现在不能清楚了:全局对象
全局对象(全局对象)在Javascript中有着重要的用途。全局对象的属性是全局定义的符号。Javascript程序可以直接使用。当Javascript解释器开始时,它将创建一个新的全局对象,并给它一组定义的初始属性。
如未定义该和楠的全局属性
如isnan全局函数()(),(),和评估parseInt()
构造函数,如日期(),(),()表达式字符串,对象和数组(),()
全局对象,如数学和JSON
全局对象的初始属性不是保留字,但应作为保留字处理。
在代码的顶部——不在任何函数中的Javascript代码,可以通过Javascript关键字引用全局对象。
全局对象的全局变量。
在客户端Javascript中,窗口对象充当全局对象。全局窗口对象有一个熟悉的窗口引用本身。它可以引用全局对象而不是这个,窗口定义了全局核心属性,但是它也定义了Web浏览器和交互式Javascript的其他一些全局属性。
当第一次创建时,全局对象定义Javascript中所有预定义的全局值,这个特殊对象还包含为程序定义的全局值。如果代码声明一个全局变量,这个全局变量是全局对象的属性。
6。包对象
Javascript对象是一个复合值:它是一个属性或一组命名值。
我们看到字符串也有属性和方法。
复制代码代码如下所示:
varHello World;
变量的话= s.substring(s.indexof(1 ),s.length); / /使用字符串属性。
document.write(字)世界/再见
因为字符串不是一个对象,为什么它有属性只要字符串的属性引用,Javascript将通过调用新的字符串转换字符串值转换为对象(S),它继承了字符串的方式。它是用来处理属性引用。一旦新的属性引用。引用一旦完成,新创建的对象将被销毁。(事实上,它并不一定能创造或毁灭这个临时对象,但它看起来像这样。)
作为字符串,数字和布尔值也有自己的方法来通过数字()和布尔()构造函数创建临时对象。这些方法的调用来自临时对象。
查看下面的代码并考虑它们的执行
复制代码代码如下所示:
var;
s.len = 4; / /它设置一个属性
var t = s.len / /找到这个属性
运行此代码时,T的值是未定义的,用于创建临时字符串对象的第二行代码,并且给出的值是4,然后销毁对象,第三行使用原来的(未修改的)字符串创建一个新的String对象,并尝试读取。
此属性不存在,表示未定义的结果。此代码显示,当读取字符串、数组和布尔值的属性值或方法时,它类似于对象,但如果您试图将值赋给它们的属性,则此操作将被忽略;修改仅在临时对象上。临时对象未保留。
需要注意的是,创建包装器对象可以通过字符串()、数字()和布尔()构造函数来显示。
复制代码代码如下所示:
var测试
n=1,
B =真的;
var =新字符串(s);
n =新的数字(n);
新的布尔(b);
Javascript在必要时将被转换为原始的包装,所以上面的对象代码经常是,但不是总是值和s,=操作符等于原始值,它的包装对象等于。
但=操作符将它们作为测距通过typeof运算符可以看到原始值和不同对象的包装提高。
7。不可变的原始值和变量对象引用。
Javascript(未定义的空布尔值和字符串)的原始值与对象基本上不同,包括数组和函数。原始值不可修改。任何方法不能(或突发)原始值。这个数字和布尔值,改变该数本身的价值是不明确的是显而易见的,但对于字符串,它不是那么明显,因为看起来像一个字符组成的字符串数组。我们希望修改的字符串中指定索引人物。事实上,Javascript是禁止这么做。所有的字符串的方法回头修改字符串,这实际上返回一个新字符串。
复制代码代码如下所示:
varHello World;
(s.touppercase); / / Hello World还没有改变的值的
字符串Hello World没有改变原来的位置。
对原始值的比较是对值的比较,当它们的值相等时,它们是相等的,这听起来有点难以理解,布尔值,null和未定义,没有其他方法来比较它们,同样,对于字符串,它不太明显。如果比较两个单独的字符串,则当且仅当它们的长度相等且每个索引的字符相等时,则认为Javascript是相等的。
复制代码代码如下所示:
一个对象:var:1
OX = 2 / /修改对象,改变对象的属性
o.y = 3 / /再一次改变对象,添加一个新属性,它
var a = {1,2,3} / /阵列可以被修改
{ 0 } = 0; /更改数组中的元素
{ 3 } = 4;向数组中添加新元素
对象的比较不是一个值的比较:即使两个对象包含相同的属性和相同的值,它们也不相等,并且具有相同索引元素的两个数组是不相等的。
复制代码代码如下所示:
具有两个对象的相同属性的var 1:1,}:
o;p;false;false;两个单独的对象从不相等(o = p;= false)
var = {,};
a;b;false。
我们通常将对象称为引用类型(引用类型)来区分Javascript的基本类型。对象的比较是引用的比较;当它们应用于同一个基本对象时,它们是相等的。
复制代码代码如下所示:
var;定义一个空数组引用变量a
var = a;b b变量指的是同一个数组。
b { 0 } = 1;
0个变量a也将被修改。1
一个真正的数组是指相同的数组,所以它们是相等的。
正如您刚才看到的代码,将对象(或数组)赋给变量只是赋值的参考值:对象本身不会重复一次。
如果要获得对象或数组的副本,必须显式地复制对象的每个属性或数组的每个元素。
复制代码代码如下所示:
var a = {'a',B,C}; / /阵列被复制
var;};空数组被复制到目标。
对于(var i = 0;i < a.length;i++){ / /每元{ }遍历的
将被复制到B元素中。
}
类似地,如果我们想要比较两个独立的数组,我们必须比较它们的属性或元素。
复制代码代码如下所示:
功能equalarrays(A,B){
如果(a.length!= b.length)return false; / /两个不同长度的数组是不平等的
对于(var i = 0;i < a.length; / /我+ +)通过所有元素循环
如果({ })!=返回false);如果数组中有任何元素不相等
返回true,否则它们是相等的
}
8。类型转换
Javascript中的值类型非常灵活。我们已经看到了从布尔值:当Javascript预计使用一个布尔值,你可以提供任何类型value.javascript本身会根据需要更改类型。一些值(真值)是真实的,和其他价值(虚值)转换为假,其他类型也是适用的。如果Javascript预计使用一个字符串,它将一个给定的值的字符串。如果希望使用Javascript数组,它转换成一个给定的值的个数(如果结果是毫无意义的,它将返回NaN),和一些例子如下:
复制代码代码如下所示:
10 +对象 / / = >10object ;
7428,两个字符串转换为数字。
var = 1 - x。
对象:南南转换为字符串
下表显示了如何在Javascript型转变。身体突出的类型,让你更惊讶的类型。空细胞代表不必要的和未履行的变换。
价值
转换为字符串
数
布尔值
对象
未定义
无效的
未定义
null
南
零
假
假
抛出TypeError
抛出TypeError
真正的
假
真实
假
一
零
新布尔(true)
新布尔(false)
(空字符串)
1.2(非空、数字)
(非空的,非数字的)
零
一点二
南
假
真正的
真正的
新字符串()
新字符串(1.2)
新字符串()
零
- 0
南
该
-该
1(无穷大,非零)
0
0
南
无限
无限 1
假
假
假
真正的
真正的
真正的
新号码(0);
新号码(- 0);
新号码(南)
新的号码(该)
新号码(-该)
新号码(1)
{ }(任何对象)
{(任意数组)
{ 9 }(1个数字元素)
{ A }(数组)
函数(){ }(任意函数)
请参阅本节的第三部分。
9
使用联接()方法
请参阅本节的第三部分。
请参阅本节的第三部分。
零
九
南
南
真正的
真正的
真正的
真正的
真正的
在上表中提到的初始值是简单的原始值的转换线,和我们讨论了文章的第三部分对布尔值的转换。转换为字符串的所有原始值的情况下也有明确的规定。数字的过渡更为微妙。这些数字的字符串可以转换直接数字,并允许有空格的开始和结束。然而,任何非空字符的开始和结束时将不会被视为数字的一部分,并将字符串的结果作为一个号码是楠。还有一些数字转换,看起来很奇怪:转换的实现1、假、空字符串0。
从原始值到对象的转换也非常简单。通过调用字符串()、数字()或布尔()构造函数将原始值转换为它们各自的包装对象。请参见本文的第六部分。
无效的定义是使类型错误(TypeError)异常时,他们用在他们认为是一个对象,不能进行正常的转换。
将对象转换为原始值有点复杂,本节的第三个部分是专门描述的。
一、转型与平等
因为Javascript可以进行灵活的类型转换,所以相等运算符==具有同样灵活的含义;
这两个值被认为是相等的。
在比较之前,0 = 0 ,字符串转换为数字。
0 =在这个布尔值转换为数字之前。
在比较和布尔值转换为数字之前,0= false字符串。
在第四章中,第一节解释了等于操作符的第一部分,在判断两个值是否相等时做这些转换,并引入同一判断中的标识运算符=不进行任何类型转换。(9)。
需要注意的是,这一价值转换到另一个并不意味着两者的价值是同等重要的。例如,未用在布尔值的预期,并将其转换为假,但这并不表明定义的= = false.javascript运营报表将使用各种数据类型可以相互转换。if语句将被转换为未定义的错误,但不要试图把= =运算符布尔值。
II。显式类型转换
虽然Javascript可以进行多种类型的转换,但有时需要进行显式转换,或者使代码清晰且易于阅读,并进行显式转换。
进行显式转换的最简单的方法是使用布尔()、数字()、字符串()或对象函数。我们在文章的第六部分中介绍了它。当它们不通过新操作符传递时,它们将被用作类型转换函数,并根据上表中描述的规则进行类型转换。
复制代码代码如下所示:
编号(3)3
字符串(假) / / = >假(假ToString)
布尔({)}
对象(3)=新的 /数字(3)
It should be noted that any value except null or undefined has toString () method. 该方法执行的结果通常是一致的()方法返回的字符串。需要注意到了同样的事情,如果你试图将空的或未定义为物体。类型错误typeerro抛出。对象()函数不抛出异常,在这种情况下:它只返回一个新创建的空对象。
Javascript中的一些操作符会进行隐式类型转换,有时用于类型转换。如果+运算符的一个操作数是一个字符串,它会将一个操作数转换成一个字符串!运算符操作数被转换为布尔值,请参见通用代码转换中的这种用法。
复制代码代码如下所示:
与字符串字符串(x)相等。
X / /相当于数(x),也可以用x-0
X!等于布尔(x)
数字解析和计算机代码的格式是一种很常见的job.javascript提供更精确的数字串的特殊功能和方法(数字串)和字符串(字符串值)抢位。
toString()方法的nmuber类定义可以接受可选参数,表示基数(二进制,八进制,十六进制,等)。如果没有指定参数,转换规则将十进制的数,也可以转换为其他十进制数(范围在2-36)。
复制代码代码如下所示:
var = 17;
b_string = n.tostring(2); / / 10001
o_string = 0 + n.tostring(8); / /成八进制021
hex_string = 0x + n.tostring(16); / /成16进制0x11
Javascript是控制小数点的位置和输出中的位数,或者决定是否指定一个索引计数方法。数字类定义了这个数字的三种方法。
ToFixed()将数字字符串按指定数量的小数点后面的数字,它永远不会使用索引计数method.toexponential()采用指数计数数成指数变换的字符串,只有一个数字在小数点,小数点后的位置是由指定的参数(也就是说,数的有效位数超过指定的位数),ToPrecision()将数字基于指定个数的有效位数的字符串。如果一些有效的数字是小于在数字部分的位数,它转换成指数形式。我们注意到,这三种方法是适当的四轮比赛中我NG五或0,
复制代码代码如下所示:
var = 123456.789;
n.tofixed(0); / / 123457
n.tofixed(2); / / 123456.79
n.tofixed(5); / / 123456.78900
n.toexponential(1); / / 1.2e + 5
n.toexponential(3); / / 1.235e + 5
n.toprecision(4); / / 1.235e + 5
n.toprecision(7); / / 123456.8
n.toprecision(10); / / 123456.7890
如果一个字符串通过数字()转换函数传入,它会尝试将它转换成整数或浮点直接量。这种方法只能转换基于十进制,没有非法尾随character.parseint()和parseFloat()函数(它们是全局函数,而不是人类和类的方法),更flexible.parseint()只分析整数。和parseFloat()可以解析整数和浮点数。如果字符串正面0x或0X,parseInt()解析到16号。两方法会跳过任何数量的前导空间解析更多数字字符尽可能。而忽略了后面的内容。如果第一个是一个非法的数字直接量,回到南
复制代码代码如下所示:
ParseInt(3many好) / / = > 3;
ParseFloat(3.14meters ) / / = > 3.14
ParseInt(12.34) / / = > 12
ParseInt(0xFF) / / = > 255
ParseInt(- 0xff ) / / = > 255
ParseFloat(1) / / = > 0.1
ParseInt(0.1) / / = > 0
ParseInt(1) / / = >南不能启动。
ParseInt(112元) / / = >南不能以美元
ParseInt()可以得到第二可选参数,此参数指定的数字转换的基数。价值的法律范围2-36
复制代码代码如下所示:
ParseInt(11
ParseInt(FF,16) / / = > 255(15 * 16 + 15)
ParseInt(ZZ
parseInt(077, 8)或63(7 * 8 + 7)
ParseInt(077
对象被转换为原始值。
转换对象的布尔值是非常简单的:所有的对象,包括数组和函数,转换为真实的。至于包装对象,新的布尔(假)比原始值的对象,并将其转换为真实的。转换对象的字符串(字符串和对象)对象编号(对象数)是通过转换后的对象调用一个方法,一个麻烦的事实是,Javascript对象来执行转换两种不同的方式。接下来,我们将讨论讨论以下情况更为复杂。值得注意的是,这里所说的字符串和数字转换规则只适用于局部对象(本地fangf对象)。主机对象,如由Web浏览器定义的对象,可以根据各自的算法转换成字符串和数字。
所有对象都继承了两个转换方法。第一个是toString(),它的功能是返回一个字符串,反映对象。默认toString()方法不返回一个有趣的价值。
({ x 1,y:2 })。ToString({对象}) / / = >
许多类定义toString()方法更具体的版本。
例如,toString()的数组类的方法(数组)将一个数组中的元素转换为字符串,并添加逗号分隔的元素,并综合得到的字符串。
toString()函数类的方法(功能类)收益实现的功能定义的表示。事实上,这样的实现是将用户定义的函数的Javascript源代码的字符串。
日期类(日期类)定义toString()返回一个可读的方法(Javascript解析解析)日期和事件的字符串
toString()方法的正则表达式类定义将RegExp对象成直接的正则表达式字符串的数量。
复制代码代码如下所示:
{ 1, 2, 3 } ToString(1,2,3) / / = >
(函数(x){ f(x);})(ToString); / / = >功能(x){ f(x);}
/ D / g.tostring( / / D + G); / / = >
新的日期(2015, 0, 1),ToString() / / = > Thu Jan 012015 00:00:00 GMT + 0800(中国标准时间)
另一个功能是:()。这个方法的任务没有详细定义:如果有任何原始值,它将默认地将对象转换为它的原始值。对象是复合值,并且大多数对象不能真正代表原始值。数组、函数和正则表达式只继承默认方法。valueOf()方法调用这些实例可以返回对象本身。对于()的类定义方法返回日期的毫秒数内表示自1970年1月1日。
复制代码代码如下所示:
var a新的日期(2015, 0, 1); / / = > Thu Jan 012015 00:00:00 GMT + 0800(中国标准时间)
D.valueOf() / / = > 1420041600000
通过使用toString()()和()方法,我们刚刚解释,你能做的对象转换为字符串和数字对象。但在某些情况下,Javascript执行一个完全不同的对象的原始值的转变。这些特殊的场景将在本节最后讨论了。
将Javascript对象转换为字符串的过程如下
如果对象的toString()方法,该方法被调用。如果它返回一个值,将该值转换成Javascript字符串(如果它不是一个字符串本身)和返回字符串的结果。
如果该对象没有toString()方法,这个方法不返回原始值,然后将值()调用Javascript的方法。如果这种方法存在,Javascript调用它。如果返回值为原始值,Javascript会责备的值转换为字符串。
9。变量声明。
在Javascript程序中,应该在使用VaR声明变量的变量之前声明它,如下所示:
var i;
VaR和;
还可以通过var关键字声明多个变量。
太阳一号;
还可以声明和写入变量的初始值和变量;
var消息hello;
var i = 0,j = 0,k = 0;
如果在var语句中指定变量的初始值,尽管这个语句变量,但是在它的初始值未定义之前给它一个值。我们注意到,在循环中也可以使用var语句,它可以循环变量更简洁的语句在语法体中使用:
复制代码代码如下所示:
对于(var i = 0;i < 10;+ +)日志(i);
对于(var i = 0,J = 10;i < 10,J = 100;i++,J)console.log(i * j)
对于(VAR P O)console.log(P);
如果在var语句中指定变量的初始值,尽管这个语句变量,但是在它的初始值未定义之前给它一个值。我们注意到,在循环中也可以使用var语句,它可以循环变量更简洁的语句在语法体中使用:
复制代码代码如下所示:
var I=10;
i =十;
10。变量范围
变量的左和右域(范围)是程序源代码中定义的区域,全局变量具有全局范围。它在Javascript代码中处处定义,但是函数中声明的变量只在函数体中定义,它们是局部变量,效果是局部化的,函数参数也是局部变量,它们只在函数体中定义。
在函数中,局部变量的优先级高于同一名称的全局变量。如果变量和全局变量用局部变量或函数参数的函数中的语句命名,则全局变量由局部变量覆盖。
复制代码代码如下所示:
变量范围为全局;声明全局变量
功能checkscope(){
var范围=本地;本地变量声明的名称
退货范围;
}
Checkscope(局部) / / = >
虽然可以在全局范围内编写代码,但不能编写var语句,但在声明本地变量时必须使用var语句。
复制代码代码如下所示:
范围= 全局;声明一个全局变量,即使不使用var声明
功能checkscope2(){
范围;修改全局变量。
myscope =地方; / /在这里宣布新的全局变量
返回{范围,myscope }; / /
}
(checkscope2); / / = > {本地
用于修改全局变量的本地
myscope / / = >局部搞乱了全局命名空间。
函数定义可以嵌套。因为每个函数都有它的直接作用域,所以有几个嵌套局部作用域的例子。
复制代码代码如下所示:
var范围= 全局范围;全局变量
功能checkscope(){
var范围
函数嵌套(){
VAR范围=sested范围; / /局部变量嵌套的范围内
退货范围;
}
返回嵌套();
}
(checkscope) / / = >嵌套作用域sested范围
一、功能范围和提前声明
在一些类似C语言的编程语言,已经离开他们的域的花括号中的每一段代码,在代码之外声明变量并不是所谓的块级作用域中可见(块范围),但不是在Javascript块级的范围,而不是使用Javascript函数域(函数变量范围);声明的函数和函数内部的嵌套函数体是重要的。
在下面的代码中,我定义了k在不同的位置,它们都在同一个范围内,这三个变量在函数体中定义。
复制代码代码如下所示:
函数测试(o){
var I = 0;在整个函数中定义了i。
如果(typeif O = =对象){
var j = 0;在函数中定义,不只是在这个代码段中定义
对于(var = 0;k<10;K + +)定义在函数中,不仅在循环中。
console.log(K); / /输出数字0-9
}
console.log(K); / / K已经被定义,输出10
}
console.log(J); / / J已经被定义,但它可能不会被初始化。
}
Javascript的功能范围意味着所有的变量声明在函数总是在功能可见。有趣的是,这意味着之前声明的变量也可用。Javascript的特性叫做吊装提前,这意味着在Javascript函数中声明的所有变量,但不分配,是先进的功能上,下面的代码:
复制代码代码如下所示:
var范围;
函数f(){
console.log(范围); / /输出定义的而不是全球
这里的值是给定值,但变量本身在体内的函数是处处定义的。
console.log(范围); / /输出地方
你可能会误认为函数的第一行输出全球,因为代码直到var声明的局部变量声明的执行。事实上,由于对功能区的特点,模具零件的变量总是在整个函数体定义的,也就是说,在函数的局部变量覆盖同名的全局变量。尽管如此,只有当程序执行到var声明的局部变量可以是真正的分配。
因此,上述过程等价于:将函数提前中的变量声明为函数的顶部,而变量则在初始位置初始化:
复制代码代码如下所示:
函数f(){
var范围;函数顶部的语句中的局部变量
console.log(范围); / /变量的存在,但它的价值是不确定的
范围=本地;这里将是初始化和赋值。
console.log(范围); / /这里有我们的期望值
}
编程语言中的块级的范围,这是一个很好的编程习惯,使变量的声明和使用变量的代码尽可能接近对方在狭窄的范围内。因为在Javascript没有阻滞范围,一些程序员故意把变量声明在函数体的顶部而不是把附近的变量声明。这种方法可以让他们的源代码来反映真实的变量范围很清楚。
作为财产的变量
当声明一个Javascript全局变量时,它被定义为全局对象的一个属性。请参见本文的第三部分。
当一个变量被声明与VaR的财产,创造了不可。见第六章,第七节。也就是说,这个变量不能被删除操作员删除。也许你已经注意到了,如果你不使用严格的模型和分配变量未声明的variable.javascript自动创建全局变量。这样创建变量是全局对象的正常的可配置性。他们可以被删除。
复制代码代码如下所示:
无功truevar = 1; / /全局变量声明不能删除一个耳光
fakevar = 2; / /删除属性创建全局对象
this.fakevar2 = 3; / /。
删除truevar / / = >假变不删除
删除fakevar / / = >真正的变量被删除
删除this.fakevar2 / / = >真正的变量被删除
Javascript的全局变量是全局对象的属性,这是ECMAscript规范执行。没有规则的局部变量,但我们可以想象,一个局部变量作为一个函数调用相关对象的属性,ecmascript3规范调用对象(称为对象),和ecmascript5规范称为声明的上下文对象(声明环境记录)。Javascript可以让这个关键字的使用来引用全局对象,但没有办法参考对象存储在一个局部变量,该对象存储局部变量的独特属性是一个内部的实现,对于我们是不可见的。然而,存在的概念这些局部变量对象非常重要。
III作用链
Javascript是基于词法范围的一种语言:通过读取包含变量定义的源代码可以知道变量的作用域。
一个全局变量总是在程序中定义的。一个局部变量总是在函数内部及其嵌套函数的声明中定义。