- 语法
- 关键字与保留字
- 变量
- ECMAScript的变量是松散类型的,即每个变量仅仅只是一个用于保存值的占位符而已;
- var message; 定义变量但未初始化但变量,会保存一个特殊但值——undefined;
- 数据类型:Undefined、Null、Boolean、Number、String、Object
- typeof操作符:监测给定变量但数据类型
- “undefined”——如果这个值未定义;
- “boolean“——如果这个值是布尔值;
- “string”——如果这个值是字符串;
- “number”——如果这个值是数值;
- “object”——如果这个值是对象或null;
- “function”——如果这个值是函数;
- Undefined类型
- Undefined只有一个值,即特殊的undefined,使用var声明变量但未对其初始化时的值;
- 使用已声明但未初始化但变量,将得到“undefined”;使用未声明但变量,将会报错;
var message; //声明变量,但未初始化,默认值未undefined
alert(message); //弹出框将显示message但值,即“undefined
alert(age); //将产生错误 - 使用typeof操作符对已声明但未初始化的变量和尚未被声明的变量所返回的值均未“undefined”
var message;
alert(typeof message); //显示undefeated
alert(typeof age); //显示undefined - 即使未初始化的变量会自动赋予undefined值,但仍然推荐显示但初始化变量,这样在使用typeof操作符返回“undefined”值时,就能知道被检测到的变量还未被声明,而不是尚未初始化;
- Null类型
- 只有一个值,即特殊的null;
- 逻辑角度看,null值表示一个空对象指针,所以 “typeof null“ 返回的是“object”;
- 若定义的变量准备在将来用于保存对象,则推荐将该变量初始化为null,而不是其他值;
- undefined值是派生自null值,所以“null == undefined“的值是true;
- 无论在什么情况下都没有必要吧一个变量显式的设置为undefined;只要意在保存对象的变量在还没有真正保存对象时都应该明确地设置为null值;
- Boolean类型
- 只有两个字面值:true和false;
- 两个字面值true和false是区分大小写的;
- ECMAScript中所有类型的值都有与Boolean两个字面值等价都值
该转换规则对理解流控制语句的自动执行相应的Boolean转换很重要:
var message = "Hello world";
if( message ){
alert("Value is true");
}
- Number类型
- 使用IEEE754格式来表示整数和浮点数(浮点数在一些语言中也被称为双精度数值);
- ECMA-262定义的不同的数字字面量格式:
- 十进制字面量:最基本的数值字面量格式,在进行算数计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值;
- 八进制字面量:以8为基数,第一位必须为0,之后的是八进制数字序列(0~7);当字面值的数值超出了范围,则签到零将被忽略,后面的数值将被当作十进制数值解析,如:
var octalNum1 = 070; //八进制的56
var octalNum2 = 079; //无效的八进制数值——解析为79
var octalNum3 = 08; //无效的八进制数值——解析为8
注意:八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误; - 十六进制字面量:前两位必须为0x,后跟任何十六进制数字(0~9及A~F),其中字母A~F大小写无关;
- 浮点数值:
- 必须含有小数点,且小数点后面必须至少有一位数字(小数点前面可以没有整数,但不推荐此种写法);
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1; //有效,但不推荐 - ECMAScript会不失时机的将浮点数值转换为整数值,因为保存浮点数值需要的内存空间是保存整数数值的两倍;
var floatNum1 = 1.; //小数点后面没有数字——解析为1
var floatNum2 = 10.0; //整数——解析为10 - 用科学计数法表示极大或极小的数值:默认情况下,ECMAScript会将那些小数点后面带6个零以上的浮点数值转换为以e表示法表示的数值
var floatNum = 3.125e7; //等于31250000 - 浮点数值的最高精度是17为小树,但在进行算数计算时其精度远远不如整数,如0.1加0.2的结果不是0.3,而是0.30000000000000004
- 必须含有小数点,且小数点后面必须至少有一位数字(小数点前面可以没有整数,但不推荐此种写法);
- 数值范围
- Number.MIN_VALUE:ECMAScript能够表示的最小数值,在大多数浏览器中,该值为5e-324;
- Number.MAX_VALUE :ECMAScript能够表示的最大数值,在大多数浏览器中,该值为1.7976931348623157e+308;
- 特殊的Infinity值(无穷):当计算结果超出了JavaScript的数值范围时,该值将被自动转换成Infinity,若该值为负数,则会转换成-Infinity(负无穷);若为整数,则会转换成+Infinity(正无穷);
- isFinite()函数:判断给定的数值是否又穷;
- Number.NEGATIVE_INFINITY、Number.POSITIVE_INFINITY;
- NaN:
- 即非数值(Not a Number),是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛错了);
- 在ECMAScript中,任何数值除以非数值均会返回NaN,不会影响抛错而影响其他代码;
- NaN特点一:任何涉及到NaN的操作(如NaN/10)都会返回NaN,该特点在多步计算中可能导致问题;
- NaN特点二:NaN与任何值都不想等,包括NaN本身;
- isNaN():判断给定数值是否不是数值;
- 当isNaN()用在对象上时:
- 会首先调用对象的valueOf()方法;
- 然后确定该方法返回的值是否可以转换为数值;
- 如果返回值不能转换为数值,则基于返回值再调用toString()方法,再测试返回值;
- 数值转换
- Number():可以用于任何数据类型
- 若为Boolean值,则true和false将分别被转换为1和0;
- 若是数值,则只是简单的传入和返回,值不变;
- 若是null值,则返回0;
- 若是undefined,则返回NaN;
- 若是字符串:
- 若字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值(若有前导0则会被忽略);
- 若字符串中包含有效的浮点格式,则将其转换为对应的浮点数值(同样也会忽略前导0);
- 若字符串中包含有效的十六进制格式(如0xf),则将其转换为相同大小的十进制整数值;
- 若字符串为空(不包含任何字符),则将其转换为0;
- 若字符串中包含以上格式之外的字符,则将其转换为NaN;
- 若是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值;若转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值;
- parseInt():将字符串转换成数值
- 转换时考虑的是其是否符合数值模式;
- 转换时会忽略字符串前面的空格,直至找到第一个非空字符;
- 如果第一个字符串不是数字字符或者负号,parseInt()将会返回NaN;
- 如果第一个字符是数字字符,parseInt()将会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符;
- parseInt()也能识别出各种整数格式(及十进制数、八进制数、十六进制数):若字符串以“0x”开头且后面跟数字字符,则会将其作为十六进制数解析;若字符串以“0”开头且后面跟数字字符,则会将其作为八进制数解析;
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA"); //10(十六进制数)
var num4 = parseInt(22.5); //22
var num5 = parseInt("070"); //56(八进制数)
var num6 = parseInt("70"); //70(十进制数)
var num7 = parseInt("0xf"); //15(十六进制数) - 为parseInt()方法提供转换基数(即进制数)以避免解析分歧:
var num = parseInt("0xAF", 16); //175,通过显示方式制定parseInt()以十六进制解析数值
- parseFloat():将字符串转换成数值
- 与parseInt()类似,也是从第一个字符开始解析每个字符,一直解析到字符串末尾,或遇到一个无效的书店数字字符为止;
- 字符串中,第一个小数点是有效的,而第二个小数点则是无效的,将被忽略;
- parseFloat()只解析十进制数值;
- parseFloat()始终都会忽略前导0,所以十六进制的字符串始终会被转换为0;
- Number():可以用于任何数据类型
- String类型
- String类型用于表示有零或多个16位Unicode字符组成的字符序列,即字符串;
- 字符串字面量(转移序列或转义字符):
- 字符串特点
- ECMAScript中的字符串是不可变的,即字符串一旦创建,其值将不能改变,若要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量:
var lang = "Java";
lang = lang + "Script";
首先创建一个能容纳10个字符的新字符串——》然后再这个字符串中填充“Java”和“Script”——》最后一步是销毁原来的字符串“Java”和字符串“Script”
- ECMAScript中的字符串是不可变的,即字符串一旦创建,其值将不能改变,若要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量:
- 转换为字符串
- toString():数值、布尔值、对象和字符串都有一个toString()方法,但null和undefined值没有这个方法;
- 调用数值的toString()方法时,默认情况下是以十进制格式返回数值的字符串表示,也可以传入一个表示输出数值基数的参数;
var num = 10;
num.toString(); //"10"
num.toString(2); //"1010"
num.toString(8); //"12"
num.toString(10); //"10"
num.toString(16); //"a" - String():在不确定要转换的值是否为null或undefined的情况下使用
- 若值有toString()方法,则调用该方法(没参赛)并返回相应的结果;
- 若值是null,则返回“null”;
- 若值是undefined,则发货“undefined”;
- Object类型
- Object是一组数据和功能的集合;
- 通过new关键字创建:
var o = new Object();
var 0 = new Object; //有效,但不推荐,若不给构造函数传递参数,可省略后面的括号 - Object类型是所有它的实例的基础
- Object的每个实例都具有的属性和方法:
- constructor:保存着用于创建当前对象的函数;
- hasOwnProperty(propertyName):用于检测给定的属性在当前对象实例中是否存在,propertyName必须以字符串形式指定;
- isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型;
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,参数的属性名必须以字符串形式指定;
- toLocaleString():返回对象的字符串表示,该字符串与执行环境地区对应;
- toString():返回对象的字符串表示;
- valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同;
- typeof操作符:监测给定变量但数据类型
JavaScript高级编程(一)——基本概念
最新推荐文章于 2024-07-31 10:51:11 发布