你的位置:首页 > Java教程

[Java教程]Javascript学习笔记(三)基本概念


  本篇主要总结《Javascript高级程序设计(第三版)》第三章基本概念中的ECMAScript(以下简称ES)语言核心。

  ES推荐标识符命名采用驼峰式

  ES第五版引入了严格模式,严格模式需要在JS文件顶部或者函数内部第一行添加"use strict"这条编译指示开启。在严格模式下,很多JS中不确定的或者说不安全的操作将会报错。

  ES中变量用var跟变量名来声明,默认情况下赋值undefined。如果声明变量的同时不用var关键字的话,该变量将会被创建成为全局变量(不推荐这样做!)。ES中变量为松散类型,可以存放任意类型的值。

  ES中数据类型分为两种,一种是简单数据类型,一种是复杂数据类型。简单数据类型包括五种基本类型:Number,Boolean,String,Null和Undefined。复杂类型就一种——Object。判断一个变量是什么类型可以使用typeof操作符,注意 typeof null 返回object,因为null代表一个对象的空指针引用。还有一点,使用一个尚未定义的变量将会抛出错误,但是给定typeof一个尚未定义的变量名不会报错,会返回undefined。另外,undefined是派生自null值,所以null==undefined会返回true。

  针对Boolean类型,用的比较多的是强制转换函数Boolean(),下边有张表来总结各种数据类型的转换关系(事实上隐式转换也一样):

Boolean函数转换
数据类型转换为true的值转换为false的值
Booleantruefalse
String非空字符串""
Number非零数值,包括无穷大0和NaN
Object任何对象null
Undefined不适用undefined

  对于Number类型,此处总结一下整数转小数和小数转整数的方法:

//小数转化整数var num = 4.721;Math.floor(num);//向下取整,4Math.ceil(num);//向上取整,5Math.round(num);//四舍五入,5Math.round(num*10)/10;//保留一位小数4.7Math.round(num*100)/100;//保留两位小数4.72parseInt(num);//直接丢弃小数部分,4//整数转小数var num = 4;num.toFixed(2);//保留几位小数,注意此函数输出为字符串"4.00"

  另外对于Number类型有个特殊的值NaN(Not a number),ES中任何数值除以0不会报错误,会返回NaN值。NaN有很多特性,任何无法返回确定数值的数学操作一般都会返回NaN值。NaN与任何值都不等,包括它自己,如果进行比大小也都返回false。ES中定义了一个isNaN()的函数来判断一个值是否为NaN,在调用之前,这个函数会首先尝试把传入值转为数值。

  关于Number的强制转换有三个函数:Number(),parseInt()和parseFloat()。Number()函数有几个需要注意的转化:首先Number值都返回的是十进制的数字,Number(null) 返回0,Number(undefined)返回NaN,Number("")返回0。parseInt()函数可以指定要转换的进制数,另外需要注意以下几个情况:parseInt("")会返回NaN,parseInt("1234blue")会返回1234。对于parseFloat()也有需要注意的,比如它会忽略第二个小数点,另外它不识别进制数,所以parseFloat("0xA")返回0。

  关于布尔操作符,首先对于!操作符,!null,!NaN,!undefined都返回true。对于&&和||操作符,执行短路操作,即如果第一个操作数能够决定最终结果则不会去运算第二个操作数。

  关于相等运算符,遵循规则如果运算符两边有数字的话,那么两边都转化为数字进行比较。但是其中有个特殊情况需要注意,那就是在比较相等性的时候,null和undefined不能转换为任何值,所以null == 0返回false。

  关于语句就总结一个switch语句,该语句执行的是全等操作,比较的时候并不会执行类型转换。

  关于函数,首先没有重载,其次是函数的参数列表并非必须的,只是为了提供方便,因为函数内部有一个arguments数组来维护传入的参数,arguments只与传入的参数产生关系,与定义的参数列表无关。