3.1语法
区分大小写
标识符:首字母必须是字母、下划线、$符号,默认采用驼峰法大小写格式,跟Java一样命名即可。
注意:标点符号不要使用汉语,同时不要使用关键字和保留字、null、true、false等用作标识符,浏览器中也有可能 留有关键字,最好用下划线来命名。
注释://单行注释,/*........*/块级注释
严格模式:在整个脚本顶部或函数体中添加 "use strict",告知js引擎切换到严格模式 ,严格模式下某些不安全的操作会抛
出错误。ReactNative中每个module就需要切换到严格模式。
3.2变量
ES是弱类型的,既可以保存任何类型的变量,var来声明变量。
在函数内省略var来定义的变量是全局变量,用var在函数体内声明的变量在函数退出后就会被销毁。
var id ='001',
name = 'wkj' ,
age = 100;
//以上这种定义可读性比较强,最好给变量初始化。
3.3数据类型
5种基本数据类型:Undefined Null Boolean Number String
1种复杂数据类型:Object (对象)
所有的值最终都属于这6种类型之一。
<1>typeof操作符
由于ES是弱类型的,用typeof来检测变量的数据类型
var message;
alert(typeof message );
返回值:
undefined:值未定义
boolean:值是布尔值
string:值时字符串
number:值是数字
object:值是对象或
null(空的对象引用)
function:值是函数
<2> Undefined类型
使用var声明变量但未对其进行初始化,这个变量的值就是undefined,没有必要将变量显示的设置为undefined,eg:
var message;
alert(message==undefined);//true
未用var声明的变量,js会报错。
alert(a);//没有声明a,js报错:a
is not defined
但是使用typeof a ==undefined //true
<3> Null类型
由于null值表示的是空对象指针,所以typeof 操作符检测null值的变量时返回object。
var car = null;
alert(car);//object
如果变量将来用于保存对象,最好是将该变量初始化为null,这样只要直接检查null值就可以知道相应的变量是否已经引
用对象。
实际上undefined派生自null值:
alert(undefined == null);//返回true
若保存对象的变量还没有真正的保存对象,那么最好是将该变量初始化为null值。这样不仅可以体现null作为空对象指
针的惯例,也区别了null和undefined,而没有必要显式的设置一个变量为undefined。
<4>Boolean类型
true和false
各种数据类型的值可以通过,Boolean()函数来转换。即:var a = 12;var aboolean = Boolean(a);
各种数据类型的值转换为boolean的规则:
数据类型 true false
Boolean true
false
String
非空字符串
空字符串""
Number
任何非零数字(包括无穷大)
0和Nan
Object
任何对象
null
Undefined
不适用
undefined
根据这些转换规则,对于控制流语句中的判断,非常重要。
eg:var a = 'message';
if(!a){alert('该变量为空或undefied或为null或为0');}
<5>NUmber类型
1、
八进制:以0开头,八进制数字序列(0-7),无效的数字解析为10进制如:var a =090;//解析为90
十六进制:以0x开头,十六进制序列(0-f)
进行算数运算时,最终结果都会转换为十进制来计算.
var a=10.000;//
解析为
10;
浮点数最高精度为
17
位,精确度没有进行处理,以二进制的形式来计算
;
所以
:0.1+0.2==0.3(false).解决方案:
方法一:该方法由于是四舍五入,所以精确度依然不是很高,对于精确度要求不高的计算结果,可以考虑此方法
利用js中toFixed()方法,四舍五入parseFloat(4.2+9.4).toFixed(2);
方法二:先将待计算的数字乘以10的n次幂,换算成计算机能够识别的数值,然后计算的结果再除以10的n次幂。
最小数值:Number.MIN_VALUE;
最大数值:Number.Max_VALUE;
超出范围转换为:infinity(正无穷)、-infinity(负无穷)
判断数值是否在最大和最小之间,可以用isFinity()函数。
NaN:返回数值的操作数未返回数值的情况。NaN==NaN;//false
isNaN():判断是否不是数值
isNaN(‘123’);//false自动转换为数值
isNaN(true);//false 1
isNaN(NaN);//true
2、数值转换方法
<1>Boolean()
Boolean:true—1;false---0
Null---0
Undefined---NaN
字符串:
只包含数字(包含+-),转换为十进制前导的零会忽略掉。
有效的十六进制格式的字符串
空字符串或null---0
<2>parseInt()
忽略字符串前面的空格,直到第一个非空字符,如果第一个字符不是数字或负号、加号,则返回的是NaN,
所以parseInt()返回的是NaN(Number()返回的是0)
如果第一个是数字字符那么直到遇到非空字符为止。
所以,parseInt(’22.5’);//22因为.是非数值字符
为了解决转换进制的问题:
parseInt(a,16);第二个参数为进制数
<3>parseFloat()
解析字符串和parseInt()类似,字符串的第一个小数点是有效的,第二个就无效了;该函数只解析十进制值。
<6>String类型
1、转义字符
\n:换行
\t:制表
\b:空格
\xnn:十六进制代码nn表示的字符(n:0~f)
\unnnn:十六进制代码nnnn表示的一个unicode字符
2、转换字符串
toString(),null和undefined没有方法。
数字进行转换为字符串时,通过传递基数可以进行进制转换。
num.toString(2);//转换为二进制的字符串。
String():有toStirng()方法的值和toString()转换一样的值
null转换为'null',undefined转换为'undefined'
<7>Object类型
Object类型其实就是对象,Object的每个实例都有下列属性和方法
Construtor():创建对象的函数--构造函数,对于Object来说就是Object()
hasOwnProperty(propertyName):用于检查给定的属性在当前的对象实例中是否存在。
isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型
propertyIsEnumerable(propertyName):用于检查给定的属性是否可以使用for--in语句来遍历。
toLocaleString():返回对象的字符串表示,该字符串与本地环境有关。
toString():返回该对象的字符串
valueOf():返回对象的字符串、数值或布尔值。通常与toString()返回值相同。
3.5 操作符
<1>逗号操作符
var num1,num2,num3 =3;//声明了三个变量赋值为3
var num = (1,3,56,5);//num=5
<2>赋值操作符
var num = 10;
num = num+10;
可以用以下语句来代替:
var num = 10;
num +=10;
<3>条件操作符
var variable = boolean_expression ? true_value:false_value;
var a =10; var b =20;
var max = (a>b) ? a:b;
<4> 相等操作符
==:比较操作数值,
比较前都会进行强制转换为操作数,然后再比较 alert('1'==1);//true
===:全等,再未转化的时候比较,比较的是类型。alert('1'===1);//false
3.6 语句
for in:增强for循环,可以用来循环遍历对象中的属性,ES5之前如果对象为null,遍历时会抛出错误,ES5之后不会抛出错
误,不再执行for in语句了,所以再用该语句循环遍历属性时,最好是先判断对象是否为null或undefined。
3.7函数
不要把函数和参数命名为arguments和eval
不要出现两个命名参数相同的情况
在严格模式下会出现语法错误
<1>参数
参数封装在arguments数组中,隐形存在
<2>没有重载的一说
ES没有签名,参数是在数组中,真正的重载是不存在的。定义两个名字相同的函数时,后面的会覆盖前面的,通过传
入参数类型和数量来判断不同的反应,以此来达到重载的效果。