《avascript 高级程序设计(第三版)》 ---第三章 基本概念
本章主要介绍Javasript语言的一些语法:
1.严格模式:开启:"use strict";
2.变量:全部用var来定义,在函数中使用的称为局部变量,不能全局使用。
3.数据类型:undefined,null,boolean,number,string,object。不可以定义自定义类型。
1)使用typeof操作符返回变量的数据类型。
2)Boolean类型:
使用Boolean()函数可以把各种数据类型转换成布尔值,转换规则有:
(1)如果是String 非空字符串 true 空字符串 false
(2)如果是Number,非零数组,包括无穷大 true 0和NaN false
(3)如果是Object,任何对象 true null false
(4)undefined n/a undefined false
注意:undefined == null 是true ,但是有区别:undefined 是默认的,如果未定义的变量是对象的话,就一定要定义为null。
2)关于浮点数,因为存在精度问题,所以不要试图对一个浮点数做比较。
数值范围的问题:在ECMAScript中,最小值是Number.MIN_VALUE,最大值是Number.MAX_VALUE.超出范围显示Infinity。可以用isFinite()函数判断是否在范围之间。
数值转换:用于把非数值转换为数值:Number() parenInt() parseFloat() 第一个函数用于把任何数据类型转化。后两个适用于字符串。
Number()函数有以下转换:如果是 布尔型,转1或0. 数值 直接转出。 null值,转出0. undefined,转出NaN。 字符串的话,如果只有数字转出,如果有字符,转出NaN。 如果是空的,转出0.
parsenInt()函数有以下转换:看第一个字符是不是数字来决定是否转出。关于进制的问题,提供第二个参数是进制数。
parsenFloat()函数有以下转换:它在转换的时候只适用于十进制,所以碰到十六进制数据会转出0.
3)任何一个字符串的长度都可以通过object.length输出。
注意:字符串变量在创建之后就不能再赋值,除非在后面通过+运算符连接增加。
把一个数据类型(NULL和undefined除外)数值,布尔型,对象,字符串都可以通过toString()方法转换成字符串。这个方法可以通过传入数字基数来改变进制。 一个通用的函数是String()函数,如果是NULL和 undefined,则原样返回,其他类型按toString()方法返回。
4)object类型:创建自定义对象: var o = new Object();
Object对象有一些通用的属性。具体查看文档。
4.位操作符:
1)按位非: var num = 25 ; var num2 = ~num1 ;
按位非的本质:操作时的负值-1。
2)按位与: var result = 25 & 1 ;
3) 按位或: var result = 25 | 1 ;
4)按位异或: var reslut = 25 ^ 1 ;
5)左移: var oldValue = 5 ;
var newValue = oldValue << 5 ;
6)右移: >>
5)无符号右移: >>>
5.布尔操作符
1)逻辑非:!
如果是一个对象,返回false;
如果是一个空字符串,返回true;
如果是一个非空字符串,返回false;
如果是数值0,返回true;
如果是任意非0,包括Infinity,返回false;
如果是null,返回true;
如果是NaN,返回true;
如果是undefined,返回true。
2)逻辑与:&&
注意:逻辑与操作可以应用与任何类型的操作数,如果有一个操作数不是布尔值的情况,遵循以下规则:
如果第一个操作数是对象,则返回第二个操作数。
如果第二个数是对象,在第一个操作数求值结果是true的情况下返回该对象。
如果两个操作时都是对象,则返回第二个对象。
如果有一个操作数是NULL,则返回NULL。
如果有一个操作数是NaN,则返回NaN。
如果有一个操作数是undefined,则返回undefined。
逻辑与属于短路操作,意思就是当逻辑判断的时候第一个判断为false的时候就不在去判断第二个了。
3)逻辑或:||
如果第一个操作数是对象,则返回第一个操作数。
如果第一个操作数的求值结果为false,则返回第二个操作数。
如果两个操作数都是对象,则返回第一个操作数。
如果两个操作数都是null,则返回null。
如果两个操作数都NaN,则返回null。
如果两个操作数都undefined,则返回undefined。
逻辑或属于短路操作,意思就是当逻辑判断的时候第一个判断为true的时候就不在去判断第二个了。
注意:我们可以通过这个逻辑或的行为避免为变量赋null或undefined值。例如:
var myObject = preferredObject || backupObject ;
如果前者是null,它的值返回给myObejct,否则返回后者。