多言一句:简书的笔记搬迁,这是第一篇。
3.1、 语法
- 区分大小写
- 标识符必须以字母、下划线或 开头,其他字符可以是字母、数字、下划线或 开 头 , 其 他 字 符 可 以 是 字 母 、 数 字 、 下 划 线 或 。建议用驼峰命名法,与ECMAScript内置的函数和对象命名格式保持一致
- 注释风格同c语言
- 严格模式 “use strict” ,是一个编译指示(pragma),在此模式下ECMAScript 3中一些不确定行为将得到处理
- 语句结束的分号非必须但建议不要省略,控制语句中用代码块
var num = 3;
var num = 3 //正确,不推荐
if(a == b){ //正确,推荐使用
return true;
}
- 关键字和保留字
- 变量的作用域问题
3.2、数据类型【undefined、null、number、string、boolean、object】
- typeof操作符:可能返回undefined、boolean、string、number、object、function
- undefined类型:使用var声明变量但未对其初始化
- null类型:逻辑上看,null值表示一个空对象指针,这正是typeof null会返回“object”的原因。如果定义的变量准备在将来用作保存对象,最好初始化为null。
undefined值派生自null值
alert(null == undefined); //true
- boolean:只有两个字面值true和false
转型函数Boolean()
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
boolean | true | false |
string | 任何非空字符串 | “”/空字符串 |
number | 任何非零数字值(包括无穷大) | 0和NaN |
object | 任何对象 | null |
undefined | n/a(not applicable,不适用) | undefined |
- number类型
进制
八进制字面值以0开头,然后是0~7;字面值中的数字超过8,前导0将被忽略,后面的数值将被当做十进制数解析;八进制字面量在严格模式下无效
var number1 = 070;//八进制的70
var number1 = 078;//十进制的78
十六进制:0x打头,后面是0~F/f
浮点数
最高精度17位小数
ECMAScript会将一些浮点数转换为整数
var float1 = 1.; //整数1
var float2 = 10.0; //整数10
默认情况下,带有6个零以上的浮点数会被转换为以e表示法表示的数值。如0.0000003→ 3e-7
浮点数值计算会有舍入误差【IEEE754数值的浮点计数的通病】
0.1 + 0.2 的结果不是0.3,而是0.30000000000000004,而0.25+0.05不会有这样的问题
数值范围
ECMAScript能保存的最小数值保存在Number.MIN_VALUE中,最大值则在Number.MAX_VALUE。计算结果若超出js数值范围,会被转换成Infinity或-Infinity,该值无法参与后续计算。isFinite()函数在参数位于范围时,返回true。
NaN(Not a Number)
表示本来要返回数值的操作数未返回数值的情况,如任何数除以0,其他语言中会导致错误,而ECMAScript会返回NaN(理论上如此,但实际上正数除以0会返回Infinity,负数除以0返回-Infinity,只有0除以0返回NaN)
任何涉及NaN的操作,都返回NaN,NaN与任何值不相等,包括它本身
详细https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN
数值转换
Number(object) optional
var x1 = Number(true); //1
var x2 = Number(false); //0
var x3 = Number(new Date()); //the number of milliseconds since Jan 1,1970 UTC
var x4 = Numner("999"); //999
var x5 = Number("999 888"); //NaN
var x6 = Number("011"); //11【前导0会被忽略】
The function converts the object argument to a number that represents the object’s value.If the value cannot be converted to a legal number,NaN is returned.
parseInt(string,radix) required,optional
var a = parseInt("10"); //10
var b = parseInt("10.00"); //10
var c = parseInt("10.33"); //10
var d = parseInt("34 45 66"); //34
var e = parseInt(" 60 "); //60
var f = parseInt("40 years"); //40
var g = parseInt("He was 40"); //NaN【忽略空格后,首字符不是数字】
var h = parseInt("10", 10); //10
var i = parseInt("010"); //10 for ECMAScript 5
var j = parseInt("10", 8); //8
var k = parseInt("0x10"); //16
var l = parseInt("10", 16); //16
parseFloat(string) required
和parseInt差不多,读出一个完整的小数就结束
- string类型
①字符字面量/转义序列:有“\”开头
②字符串的特点:字符串一旦创建,就无法改变,要改变某个变量中保存的字符串,要先销毁原来的字符串,再用新的字符串填充变量。
③转换为字符串的方法
toString()
String()
- object类型
object类型是它的所有实例的基础,它所具有的任何属性和方法同样存在于更具体的对象中。
var o = new Object();
①constructor:保存用于创建当前对象的函数,上文的例子是Object()
②hasOwnProperty(prooertyName),
③isPrototypeOf(object)
④propertyIsEnumerable()
⑤toLocaleString()
⑥toString()
⑦valueOf()
3.3、操作符
一元操作符:++、–、+、-
位操作符(~、$、|、^)、左移<<、有符号右移>>、无符号右移>>>
布尔操作符!:返回结果只有两种false和true
乘性操作符*、/
求模%
加性操作符+、-
关系操作符>、<、<=、>=:注意类型转换顺序,先看能不能转成数字,再看字符串
相等操作符==、!=、===、!==
条件操作符?:
赋值操作符=(还有+=、*=、<<=等等)
逗号操作符:返回表达式中的最后一项
3.4、语句
if语句
do-while语句
while语句
for语句
由于ECMAScript不存在块级域,因此在循环内定义的变量,在外部也可以访问到。
var count = 10;
for(var i = 0;i < count;i++){
alert(i);
}
**alert(i); //10**
for-in语句
如果要迭代的对象的变量值为null或undefined,可能会抛出错误。ECMAScript 5更正了这一行为。使用for-in之前最好检测对象值
label语句
break、continue
with语句:将代码作用域设置到一个特定的对象中
with(location){
var qs = search.substring();
...
}
var qs = location.search.sunstring();
switch语句:可以使用任何类型,比较时使用全等(“===”)操作符,不会发生类型转换
3.5、函数
参数:ECMAScript中的参数在内部是用一个数组来表示的。在函数体中可以通过arguments对象【已废弃】来访问这个参数数组。但是arguments对象只是与数组类似,可以用方括号语法访问它的每一个元素(如arguments[0]访问第一个元素),用length属性确定传递了多少个参数。它不是Array的实例。
ECMAScript函数没有传统意义上的重载。如果定义了两个相同名字的函数,后面的函数会覆盖前面的。