JavaScript学习记录day2

作者: ygqygq2 分类: 开发 发布时间: 2017-04-21 15:01

JavaScript学习记录day2

1. 数据类型和变量

1.1 数据类型

1.1.1 Number

JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型:

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等,它们和十进制表示的数值完全一样。

Number可以直接做四则运算,规则和数学一致:

注意%是求余运算。

1.1.2 字符串

基本用法和python一样。

ASCII码:

Unicode字符:

多行字符串:
由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ... 表示:

模板字符串:

字符串长度:

要获取字符串某个指定位置的字符,使用类似Array的下标操作,索引号从0开始:

需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:*

JavaScript为字符串提供了一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串:

toUpperCase
toUpperCase()把一个字符串全部变为大写:

toLowerCase
toLowerCase()把一个字符串全部变为小写:

indexOf
indexOf()会搜索指定字符串出现的位置:

substring
substring()返回指定索引区间的子串:

1.1.3 布尔值

false/true

1.1.4 比较运算符

当我们对Number做比较时,可以通过比较运算符得到一个布尔值:

实际上,JavaScript允许对任意数据类型做比较:

要特别注意相等运算符==。JavaScript在设计时,有两种比较运算符:
第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。

另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:

唯一能判断NaN的方法是通过isNaN()函数:

最后要注意浮点数的相等比较:

这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

1.1.5 null和undefined

null表示一个“空”的值,它和0以及空字符串”不同,0是一个数值,”表示长度为0的字符串,而null表示“空”。

在其他语言中,也有类似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,还有一个和null类似的undefined,它表示“未定义”。

JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。

1.1.6 数组

写法和python中列表一样。
数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript的数组可以包括任意数据类型。例如:
[1, 2, 3.14, 'Hello', null, true];
上述数组包含6个元素。数组用[]表示,元素之间用,分隔。

另一种创建数组的方法是通过Array()函数实现:
new Array(1, 2, 3); // 创建了数组[1, 2, 3]
然而,出于代码的可读性考虑,强烈建议直接使用[]

数组的元素可以通过索引来访问。请注意,索引的起始值为0:

JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。

数组长度
要取得Array的长度,直接访问length属性:

修改数组
请注意,直接给Array的length赋一个新的值会导致Array大小的变化:

Array可以通过索引把对应的元素修改为新的值,因此,对Array的索引进行赋值会直接修改这个Array:

请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:

大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误。在编写代码时,不建议直接修改Array的大小,访问索引时要确保索引不会越界。

indexOf
与String类似,Array也可以通过indexOf()来搜索一个指定的元素的位置:

注意了,数字30和字符串’30’是不同的元素。

slice
slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array:

注意到slice()的起止参数包括开始索引,不包括结束索引。

如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array:

push和pop
push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉:

unshift和shift
如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉:

sort
sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序:

能否按照我们自己指定的顺序排序呢?完全可以,我们将在后面的函数中讲到。

reverse
reverse()把整个Array的元素给掉个个,也就是反转:

splice
splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

concat
concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array:

请注意,concat()方法并没有修改当前Array,而是返回了一个新的Array。
实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

join
join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:

如果Array的元素不是字符串,将自动转换为字符串后再连接。

多维数组

如果数组的某个元素又是一个Array,则可以形成多维数组,例如:

上述Array包含3个元素,其中头两个元素本身也是Array。

对象
写法和python中字典类似,对象属性的用法和python类属性的用法一样。
JavaScript的对象是一组由键-值组成的无序集合,例如:

JavaScript对象的键都是字符串类型,值可以是任意数据类型。上述person对象一共定义了6个键值对,其中每个键又称为对象的属性,例如,person的name属性为’Bob’,zipcode属性为null。

要获取一个对象的属性,我们用对象变量.属性名的方式:

由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:

如果我们要检测xiaoming是否拥有某一属性,可以用in操作符:

不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:

因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。

要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:

1.2 变量

变量
var只能声明一次,变量本身类型不固定。javascripts属于动态语言。
strict模式

学习参考教程:http://www.liaoxuefeng.com

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注