变量
//错误
“use strict” //严格模式可以放在首行
var eval,arguments; //这里错误 严格模式不能使用这2个保留字作为变量名
function test(){
//“use strict” 也可以放在函数内
}
//正确 但不推荐
function test(){
message=“hi”;
}
test();
alert(message);
//不使用var定义,函数被调用时,会成为全局变量。
数据类型(6种)
Undefind
Null
Boolean
Number
String
Object(复杂数据类型)
ECMAScript不支持创建自定义类型的机制
typeof操作符
“undefined”—如果这个值未定义
“boolean”—如果这个值是布尔值
“string”—如果这个值是字符串
“number”—如果这个值是数值
“object”—如果这个值是对象或者null
“function”—如果这个值是函数
注意typeof是操作符不是函数,尽管后面可以加上小括号
var message=“hi”;
alert(typeof message);
alert(typeof (message));
alert(typeof 95);
Undefined类型
//初始化未定义值为undefined
//包含undefined的变量和未定义的变量还是不一样的
var message;
alert(message); //undefined
alert(typeof age); //undefined
alert(age); //报错
Null类型
//初始化未定义值为undefined
//包含undefined的变量和未定义的变量还是不一样的
var car=null;
alert(typeof car); //object 空指针对象
//undefined 派生于 null
alert(null == undefined); //true
Boolean类型
数据类型 | 转换为true值 | 转换为false值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非0数值 | 0和NaN(not a number) |
Object | 任何对象 | null |
Undefined | n/a(不适用) | undefined |
Number类型
进行计算时,所有进制最终都会转换成10进制
//十进制整数
var intNum=55;
//八进制整数第一位必须为0,严格模式无效
var octalNum1=070; //八进制的56
//八进制后面的数值超过7则以十进制解析
var octalNum2=079; // 无效的八进制数值----解析为79
var octalNum3=08;// 无效的八进制数值----解析为8
//十六进制整数,0x开头,后面跟0-9 A-F可大小写
var hexNum1=0xA; //十六进制的10
var hexNum2=0x1f; //十六进制的31
浮点数类型
浮点数最高精度17位小数,有最大最小值,如果计算结果超出则自动被转换成正负无穷
var floatNum1=1.1;
var floatNum2=0.1;
var floatNum3=.1; //有效但不推荐
//小数点后没有数值或者为0,则会自动转换为整数
var floatNum4=1.; //小数点后没有数字,解析为1
var floatNum5=10.0; //整数,解析为10
//极大极小时可以使用e
var floatNum6=3.125e7; //3.125*10^7=31250000
if(a+b==0.3){
//a和b分别是0.05和0.25时可以通过
//a和b分别是0.1和0.2时无法通过
alert("you got 0.3. ") //不要做这样的测试
}
NaN
NaN/10=NaN
alert(NaN==NaN) //false NaN与任何值不相等,包括自己
alert(isNaN(NaN)) //true
alert(isNaN(10)) //false 10是一个数值
alert(isNaN("10")) //false 可以被转换成数值10
alert(isNaN("blue")) //true 不能被转换成数值
alert(isNaN(true)) //false 可以被转换成1
对象数值isNaN转换:(这个过程也是内置函数和操作符的一般执行流程)
1.调用对象的valueOf()
2.如果结果为NaN,则调用对象toString()
3.最后按照普通数据进行转换
Number()
var num1=Number("Hello") //NaN
var num5=Number(undefined) //NaN
var num2=Number("") //0
var num3=Number("000011") //11
var num4=Number(true) //1
parseInt()会忽略开头的空字符串直到找到第一个非空字符,如果第一个字符不是数字字符或者负号,则返回NaN,如果是则一直解析到不是数字为止。
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
ECMAScript3解析 070为56
ECMAScript5 parseInt不具备解析八进制能力,解析 070为70
解决:
var num3=parseInt("0xAF",16) //十六进制 175
var num3=parseInt("AF",16) //十六进制 175 可以不需要0x开头自动解析
var num5=parseInt("070",8) //八进制 56
parseFloat同理parseInt,只解析第一个小数点,并且只支持十进制,所以没有第二个参数。如果解析十六进制则返回0
逻辑与
当有一个操作数为对象时,把对象当做true即可判断结果
a && b 短路操作
如果a为对象或者true则返回b。
如果a为false则返回false
如果a为Null则返回Null
如果a为NaN则返回NaN
如果a为undefined则返回undefined
逻辑或
当有一个操作数为对象时当做true即可判断结果
a || b 短路操作
如果a为对象则返回a。
如果a为false则返回b。
如果a为true则返回true
如果ab都为false则返回false
如果ab都为Null则返回Null
如果ab都为NaN则返回NaN
如果ab都为undefined则返回undefined
加减乘除
理解Infinity 为不确定值即可,并且规定无穷大不能与0相乘
Infinity * 0 =NaN
减号运算前会调用number()转换
5 - null = 0
5 - true = 4
5 - "" = 5
5 - "2" = 3
== 计算时会先对操作数进行转换
=== 计算时不转换
null==undefined //true
null===undefined //false
switch在比较值的时候使用的是全等操作符,所以不会发生类型转换
函数
1.函数调用时可以任意传参数
2.函数被调用时会生成一个隐藏数组arguments,但arguments不是Array实例。
3.arguments长度取决于函数被调用时传递的参数而不是函数被新建时写了几个参数。
4.可以使用arguments[index]获取参数,并且arguments[index]重新赋值时,函数括号内的参数也会被同步更新,但是并没有引用内存地址。