JavaScript 学习笔记 01 (变量、数据类型)
一、变量
1、标识符
标识符是指变量、函数、属性的名字,或者函数的参数。
标识符的命名规则:
- 第一个字符必须是一个字母、下划线( _ )或者是一个美元符合( $
- 其它字符可以是字母、下划线、美元符合或者数字
在 JavaScript 规范中,建议是使用驼峰式命名规则,如:myCar、firstSecond、doSomething
2、声明一个变量
JavaScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。
var message
这行代码定义了一个 message 的变量,可以保存任何值。如果还未进行初始化,则保存一个特殊的值 undefined 。
var message = "hi"
message = 100
这两行代码定义并且初始化保存了一个字符串值 "hi" , 然后该值又被一个数字值 100 取代。这样完全是有效的。
二、数据类型
JavaScript 中的数据类型共6种
有5种基本数据类型:Undefined、Null、Boolean、Number和String,
还有一种复杂数据类型:Object。
1、Undefined 类型
Undefined 类型只有一个值,即特殊的 undefined 。在使用 var 声明变量未进行初始化时,这个变量的值就是 undefined,例如:
var message alert(message == undefined) //true
不过,包含 undefined 值的变量与尚未定义的变量还是不一样的,例如
var message alert(message) // "undefined" alert(age) // 产生错误,age is not defined
但是对未初始化的变量和未声明的变量进行 typeof 操作,都会返回 undefined 值
var message alert(typeof message) // 'undefined' alert(typeof age) // 'undefined' 不会报错
2、Null 类型
Null 类型同样只有一个值,这个特殊的值是 null。
从逻辑角度来看,null 值标识一个空对象指针,而这也正是使用 typeof 检测 null 值时返回一个 "object" 的原因。
var car = null alert(car) // "null" alert(typeof car) // "object"
3、Boolean 类型
Boolean 类型有两个值:true 和 false。
虽然 Boolean 类型的字面值只有两个,但是 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值。要将一个值转换为对应的 Boolean 值,可以调用转换类型函数 Boolean()
数据类型 | 转换为 true 的值 | 转换为 false 的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字 | 0和Nan |
Object | 任何对象 | null |
Undefined | undefined |
这些转换规则对理解流程控制语句(如 if 语句)自动执行相对应 Boolean 转换非常重要,例如:
var message = "Hello world" if ( message ) { alert("Value is true") }
这个代码就会运行显示一个警告框,因为 message 被自动转换成了 true。
4、Number 类型
a、浮点数值
var a = 1.2345
保存浮点数值需要的内存空间是整数值的两倍,因此 ECMAScript 会不失时机的将浮点数值转换为整数值。
var floatNum1 = 1. // 小数点后面没有数字,解析为1 var floatNum2 = 10.0 // 整数,解析为10
如果小数点后面带有6个零以上的浮点数值,讲转换为 e 表示法表示的数值
var a = 0.000000007 // a = 7e-9
b、数值范围
alert(Number.MIN_VALUE) // 5e-324 alert(Number.MAX_VALUE) // 1.7976931348623157e+308 alert(Number.MAX_VALUE * 2) // Infinity
能够表示最大和最小的数值保存在 Number.MAX_VALUE 和 Number.MIN_VALUE 中,如果超过这个数值,则会被转化为特殊的 Infinity 值和 -Infinity 。Infinity 值是不能够参与运算的。
可以使用 isFinite() 函数来判断这个数是否在最大值和最小值之间。
c、NaN
NaN 是一个特殊的数值,表示一个本来要返回数值的操作未返回数值的情况(这样就不会抛出错误了)。
NaN 有两个非同寻常的特点。
1、任何涉及 NaN 的操作都会返回 NaN。
2、NaN 和任何指都不相等,包括NaN。
alert(typeof NaN) // "number" alert(NaN / 2) // "NaN" alert(NaN == NaN ) // "false"
d、数值转换
有三个函数可以把非数值转换成数值:Number()、parseInt()和parseFloat()。
Number()
- 如过是 Boolean 值,true 和 false 分别转换成 1 和 0
- 如果是数字值,则输出等于输入
- 如果是 Null 值,则返回 0
- 如果是 undefined,则返回 NaN
- 如果是 字符串,则遵循以下规则:
- 如果字符串为空,则返回0
- 如果字符串只包含数字,包括带正负号的情况,则讲转换为十进制的数值
- 如果字符串包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制数值
- 如果字符串包含了别的,则返回NaN
var num1 = Number(true) // 1 var num2 = Number(false) // 0 var num3 = Number(12) // 12 var num4 = Number(000123) // 123 var num5 = Number(null) // 0 var num6 = Number("hello) // NaN var num7 = Number("0xf") // 15
parseInt()
忽略字符串前面的空客,找到第一个非空格字符。如果第一个字符不是数字符号或者负号,parseInt() 就会返回 NaN。 如果第一个字符是数字或者正负号,会解析第二个,直到解析完所有的字符或者遇到非数字字符。
var num1 = parseInt(true) // NaN var num2 = parseInt(" 012av") // 12 var num3 = parseInt("22.5") //22 var num4 = parseInt("") //NaN
parseInt() 函数存在第二个参数,转换时使用多少进制的。
var num1 = parseInt("0xAF",16) // 175 var num2 = parseInt("0xAF",10) // 0 var num3 = parseInt("AF",16) // 175 var num4 = parseInt("AF",10) // NaN
parseFloat()
parseFloat() 与 parseInt() 使用方法类似,唯一不同的是遇到第一个无效的浮点数数字为止。
var num1 = parseInt("22.5") //22 var num2 = parseFloat("22.5") //22.5 var num3 = parseFloat("22.55.22") // 22.55
5、String 类型
字符串是不可变的,字符串一旦创建,它们的值就不能改变。要改变的话必须要销毁原来的字符串,再创建一个新的赋值给它。
var lang = "Java" lang = lang + "Script" // "JavaScript" 是把新的字符串赋值给了lang
toString() 函数可以把一个值转换为字符串。
var age = 11 var ageAsString = age.toString() // "11" var found = true var foundAsString = found.toString() // "true" // 通常情况下不需要传递参数,如果要转换的是 Number 类型,可以加一个参数表示数值的基数 var num = 10 alert(num.toString()) // "10" alert(num.toString(2)) // "1010" alert(num.toString(8)) // "12" alert(num.toString(10)) // "10" alert(num.toString(16)) // "a"
6、Object 类型
Object 对象其实就是一组数据和功能的集合。对象可以通过执行 New 操作符后跟要创建的对象类型的名称来创建。
例如:var o = new Object()
后续会有专门的一章详细记录 Object ,这里就简单提及一下。