红宝石 -- 第三章(复习)

3.1.2 标识符

第一个字符必须是字母,下划线(_),或者一个美元符号($);
其他字符可以是字母,下划线,或数字。
ECMAScript标识符采用驼峰大小写的格式。

3.3 变量

ECMAScript的变量是松散类型的,所谓松散类型就是指可以存放任何数据类型的数据。
注意:使用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说如果在函数中使用var定义一个变量,那么这个变量在函数退出后将会被销毁。
例如:

function test () {
	// 局部变量
	var message = "hi"; 
}

test ();
// 出现错误 由于使用 var 定义当函数被调用时,就会创建该变量并为其赋值。在此之后,这个变量就会立即被销毁。
alert (message);

但是省略 var 操作符就会创建一个全局变量

function test () {
	message = "hi"
}
test();
alert(message); // hi

这是因为message变成了一个全局变量。调用过一次函数就会有定义,就可以在函数外部的任何地方被访问到。

3.4 数据类型

ECMAScript中有
5种简单数据类型(也称基本数据类型):,null,boolean,number 和 string
1种复杂数据类型 – Object – 实质上是由一组无序的名值对组成的。 ECMAScript不支持任何创建自定义类型的数值。

3.4.1 typeof操作符

typeof是一个操作符而不是一个函数。
typeof操作的操作数可以是变量,也可以是字面量。

3.4.2 Underfined类型

Underfind类型只有一个值,即特殊的underfined。在使用var声明变量而未对其加以初始化时,这个变量的值就是underfined;

var message;
alert(message == underfined); // true 

注意:包含underfined值的变量与尚未定义的变量还是不一样的。

	// 声明后默认获得了underfined值
	var message;

	// 但是下面的这个没有声明
	var age
	
	alert(message); // underfined
	alert(age); // 产生错误

对于未声明过的变量只能执行一项操作,就是使用typeof操作符检测其数据类型。

3.4.3 Null类型

Null类型是第二个只有一个值的数据类型,这个值是null;
null值表示一个空对象指针,而这也是使用typeof操作符检测null会返回"Object"的原因。

	var car  = null;
	alert(typeof car); // Object

实际上:underfined 值 是派生自null 值的。因此他们的相等性测试要返回true;

	alert( null == underfined); // true

但值得注意的是:

	alert(null === undefined); // false 因为它们是不同类型的值。

3.4.4 Boolean类型

Boolean类型是使用最多的一种类型,该类型只有两个字面值:true 和 false;这两个值与数字值不是一回事;true不一定为1;false不一定为0
虽然Boolean类型的字面量值只有两个,但ECMAScript中的所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为对应的Boolean值,可以调用转型函数Boolean;

数据类型         转换为true的值        			转换为false的值
Boolean			true				 			false
String			任何非空字符串		 			""(空字符串)
Number			任何非零数字值(包括无穷大)			0和NaN
Object			任何对象							null
Underfined		n/a(not applicable不适用)		underfined

3.4.5 Number类型

八进制字面值第一位必须是零(0);十六进制字面值的前两位必须是0X;在进行算数计算时,所有的八进制和十六进制的值都会被转换为十进制。
注意:鉴于js中保存数值的方式,可以保存正零(+0) 和 负零(-0);正数和负数被认为相等。

  1. 浮点数值
    由于保存浮点数值需要的 内存空间 是 保存整数值得两倍;因此ECMAScript会不失时机的将浮点数值转换为整数值;
    对于那些极大或极小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。
    浮点数值的最最高精度为17位小数,但在进行算数计算时其精度远远不如整数,因此因此永远不要测试某个特定的浮点数值
	// 不要做这样的测试 0.1 + 0.2 = 0.30000000000000004
	if (a + b == 0.3) {
		alert("you get 0.3")
	}
	// 测试的两个数的和不是 0.3 但如果这两个数是0.05 和 0.25 或者 0.15 和 0.15 都不会有问题
  1. 数值范围
    由于内存的限制,ECMAScript并不能保存世界上的所有值,能表示的最小值保存在Number.MIN_VALUE中,最大值保存在Number.MAX_VALUE中,如果某次计算超过了js的范围,那么这个数值将会自动转换为Infinity值,具体来说,如果这个值是负数,就转换为-Infinity(负无穷)。如果是正数就转换成Infinity(正无穷)
    如果想确定一个数是不是位于最小数和·最大数之间,那么可以使用isFinite()函数。这个函数在参数位于最小数和最大数之间会返回true。
    注意:如果某次计算返回正或是负Infinity值那么该值将无法参加下一次的计算,因为Infinity是无法参与计算的数值

  2. NaN
    NaN,即非数值(Not a Number)是一个特殊的数值,这个数值表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误)
    特点:任何涉及NaN的操作(例如:NaN/10)都会返回NaN,这个特点会在多步计算中有可能导致问题。其次NaN与任何值都不相等,包括NaN本身

	alert(NaN == NaN); // false

isNaN函数会判断是否"不是函数";

  1. 数值转换
    有三个函数可以把非数值转换为数值:Number(),parseInt(),parseFloat().
    注:number()可以用于任何数据类型 而后两个函数专门用于将字符串转换成数值。

number()函数转换规则:如果是null值,返回0
如果是 underfined 则返回 NaN
如果字符串中不包含任何有意义的数值那么就会返回NaN;

parseInt():函数在转换字符串时,更多的是看齐是否符合数值模式。它会忽略字符串前面的空格,直到找到第一个非空字符。
如果第一个字符不是数字字符或者负号,parseInt()会返回NaN,也就是说用parseInt()转换空字符串或返回NaN,(Number()函数会对空字符串返回0)
这个函数存在第二个参数;进行转换时的进制。

parseFloat(): 第一个小数点有效,其次会忽略前导的0;

	// 10(十六进制数) 
	var num = parseInt(0xA);    
	// 0
	var num = parseFloat(0xA);   

3.4.6 String类型

String类型表示用于有0个或多个16位的Unicode字符组成的字符序列,即字符串。

  1. 字符字面量
    String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。
    \n 换行 \t 制表 \unnnn 以十六进制代码nnnn表示的一个Unicode字符。
    任何字符串的长度都可以通过访问其length属性取得,这个属性返回字符数包括16位字符的数目。如果字符串包含双字节字符,那么length属性可能不会精确地返回字符串中的字符数目

  2. 字符串的特点
    ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量

  3. 转换为字符串
    要把一个值转换成字符串有两种方式。第一种是使用几乎每个值都会有的toString()方法.
    数值,布尔值,对象和字符串值(每个字符串也有toString方法,该方法返回字符串的一个副本)都有toString()方法,
    但是null 和 undefined值没有这个方法
    在数值调用toString()方法时可以传递一个参数:输出数值的进制;默认是以十进制返回数值的字符串表示。

在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换成字符串。
规则: 如果有toString()方法,则调用该方法返回相应的结果。
如果值是null,返回"null"
如果值是undefined,返回"undefined"

3.4.7 Object类型

ECMAScript中的Object是所有对象的基础。
ECMAScript中的对象就是一组数据和功能的集合。对象可以通过执行new操作符后要跟创建的对象类型的名称来创建。

3.5操作符

3.5.1 一元操作符

1.递增和递减操作符

他们不仅适用于整数,还适用于字符串,布尔值,浮点数值和对象。
在应用一个不包含有效数字字符的字符串时,将变量的值设置为NaN。

3.5.2 位操作符

ECMAScript中所有的数值都是以IEEE-754 64位格式存储,但位操作符并不直接操作64位的值。而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换成64位。
在对特殊值NaN 和 Infinity 值进行位操作时,这两个值将会被当做0处理
如果对非数值应用位操作符,会先使用Number()函数将该值转换为一个数值(自动完成),然后再应用位操作,得到的结果将是一个数值。

3.5.3 布尔操作符

一共有三个:非(NOT),与(AND),或(OR)

  1. 逻辑非 ( ! )
    可以用于ECMAScript中的任何值,无论这个值是什么数据类型,这个操作符都会返回一个布尔值
    逻辑非操作符首先会将其操作数转换成一个布尔值,然后再对其求反。
    骚操作:同时使用两个非操作符,会模拟Boolean()转型函数的行为。其中第一个逻辑非操作符会基于无论什么操作数返回一个布尔值,第二个逻辑非操作则对该布尔值求反,于是就得到了这个值真正对应的布尔值。

  2. 逻辑与 ( && ) 在使用逻辑与操作符时始终要记住他是一个短路操作符
    逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;
    规则: 如果第一个操作数是对象,就返回第二个操作数。
    如果第二个操作数是对象,只有在第一个操作数的求值结果为true的情况下才会返回该对象。
    如果两个操作数都是对象,则返会第二个操作数。
    如果第一个操作数是null,则返回null;
    如果第一个操作数是NaN,则返回NaN;
    如果第一个操作数是undefined,则返会undefined;

  3. 逻辑或 ( || ) 也是一个短路操作符
    可以利用逻辑或的行为避免为变量赋 null 或 undefined 值。
    如果有一个值不是布尔值,逻辑或也不一定返回布尔值。
    规则: 如果第一个操作数是对象,则返会第一个操作数。
    如果第一个操作数的求值结果为false,则返会第二个操作数。
    如果两个操作数都是对象,则返回第一个操作数。
    如果两个操作数都是null,则返会null;
    如果连个操作数都是NaN,返回NaN;
    如果两个数都是undefined,返回undefined;

3.5.4 乘性操作符

ECMAScript定义了三个乘性操作符:乘法,除法,求模。

1. 乘法

操作数为非数值情况下会进行自动类型的转化。如果某个操作数不是数值,后台会使用Number()转型函数对其转型为数值。空字符串被转换成0,布尔值true为1;
规则: 如果乘积超过了ECMAScript数值的范围,则返会Infinity或者是-Infinity。
如果有一个数是NaN,那么结果就是NaN;
如果Infinity 与 0相乘那么结果就是NaN。
如果是Infinity 与 非0 数相乘,那么结果是Infinity 或是 -Infinity 取决于有符号操作数的符号。
如果是Infinity 与 Infinity 相乘那么结果是Infinity;

2. 除法

规则: 如果有一个操作数是NaN,那么结果就是NaN。
如果是Infinity 被 Infinity 除,则结果是NaN。
如果是零被零除,则结果是NaN。

3. 求模

规则: 被除数是无穷大而除数是有限大的数值,结果是NaN;
如果被除数是有限大而除数是0,结果是NaN;
如果Infinity被Infinity除,结果是NaN。
如果被除数是有限大而除数是无穷大的数值,则结果是被除数。

3.5.5 加性操作符

1.加法

规则: 如果有一个操作数是NaN,则结果是NaN
如果是Infinity 加 Infinity,结果是Infinity;
如果是-Infinity 加 -Infinity,结果是-Infinity
如果是Infinity 加 -Infinity,则结果是NaN。
+0 + +0 = +0; -0 + -0 = -0;+0 + -0 = +0;
如果两个都是字符串则将第二个与第一个连接起来。

2. 减法

规则: 如果有一个操作数是NaN,则结果为NaN;
如果是Infinity - Infinity = NaN;
如果是 -Infinity - -Infinity = NaN;
如果是Infinity - -Infinity = Infinity;
如果-Infinity - Infinity = -Infinity;
如果是 +0 - +0 = +0;
如果是 -0 - +0 = -0;
如果是 -0 - -0 = +0;

3.5.6 关系操作符

任何操作数与NaN比较都是false;

3.7 函数

函数在执行完return语句之后停止并立即退出。因此,位于return语句之后的任何代码都永远不会执行。

3.7.1 理解参数

函数体内可以通过arguments对象来访问参数数组,从而获得传递给函数的每一个参数。
通过访问arguments对象的length属性可以获知有多少个参数传递给了函数。
命名的参数只提供便利,但不是必须的。

3.7.2 没有重载

ECMAScript没有传统意义上那样实现重载,但是可以通过检查传入函数中参数的类型和数量作出不同反应,可以去模仿方法的重载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值