类型、值和变量
- 数据类型分为两类:原始类型、对象类型
1.原始类型包括数字、字符串和布尔值
2.特殊的原始值:null(空)和undefined(未定义)
3.对象(object)是属性(property)的集合,每个属性都是由“名/直对”(值可以是原始值,也可以是对象)构成。
4.普通对象是“命名值”的无序集合。一种特殊对象:数组,表示带编号的值的有序集合。
5.一种特殊对象:函数。
6.JavaScript语言核心定义的类:数组(Array)、函数(Function)、日期(Date)、正则(RegExp)、错误(Error)
- 数字(整数范围:)
注:在任务数字之前添加负号(-)可以得到他们的负值,但负号是一元求反运算符,并不是数字直接量语法的组成部分。
1.整数直接量:JavaScript支持并能识别十进制、十六进制,尽管ECMAScript标准不支持八进制直接量,但JavaScript的某些实现可以允许采用八进制(基数为8)形式表示整数【0377//3*64+7*8+7=255】。ECMAScript6八进制是明令禁止的。
2.浮点型直接量:
3.JavaScript中的算术运算:
基本的加法(+)、减法(-)、乘法(*)、除法(/)、取余(%)
JavaScript通过Math对象还支持更加复杂的算术运算
JavaScript中预定义了全局变量:infinity、NAN,定义为只读。运算时溢出得到结果为infinity;下溢得到结果为0;被零整除并不报错,特殊的是零除以零(无意义),结果为“NAN”。
4.二进制浮点数和四舍五入错误
由于JavaScript采用的是二进制表示法,所以并不能精确的表示0.1这样简单的数字
这里,我们应当避免小数比较,而应该先取整再比较大小。
5.日期和时间
-
文本
1.字符串直接量:“\”结束代表换行,代码中双引号与单引号之间应有独立的引号风格,避免混淆或影响。
2.转义字符“\”:
3.字符串的使用:
注:字符串可当作是制度数组
4.模式匹配(RegExp()):后续章节详细学习。
与Date一样,并不是JavaScript的基本类型,它只是一种具有实用API的特殊对象。尽管RepExp并不是语言中的基本数据类型,但它们依然具有直接量写法,可以直接在JavaScript中实用。两条斜线之间的文本构成了正则表达式直接量,第二条斜线后也可以跟随一个或多个字母。
-
布尔值
保留字:true、false
1.undefind、null、0、-0、NaN、“”//空字符串 都会判定为false;所有其他值,包括对象(数组)都会转成true。
- null和undefined
2.null,它是关键字。用来描述“空值”,是一个特殊的对象值。,含义是“非对象”。通常认为null是它自有类型的唯一一个成员,它可以表示数字、字符串和对象是“空值”的。
3.undefined,它不是关键字,是全局变量。更深层次的“空值”,返回“undefined”的几种情况:
①.对象未初始化
②.值的空缺
③.属性或元素不存在
④.函数没有返回值
⑤.引用没有提供实参的函数形参的值
4.undefind、null都不包含任何属性和方法
5.undefind==null 而 undefind!==null
- 全局对象
全局对象的属性是全局定义的符号,JavaScript程序可以直接使用。当JavaScript解释器启动时(或者任何WEB浏览器加载新页面的时候),它将创建一个新的全局对象,并给它一组定义的初始属性:
全局属性,比如undefined、Infinity和NaN
全局函数,比如isNaN()、parseInt()和eval()
构造函数,比如Date()、RegExp()、String()、Object()和Array()
全局对象,比如Math和JSON
-
类型转换
- 函数作用域和声明提前
JavaScript中没有块级作用域,取而代之的是函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。
声明提前即函数里声明的所有变量(不涉及赋值)都被“提前”至函数顶部。