JavaScript学习------基本概念

标识符

标识符:指变量、函数、属性名或函数的参数。

标识符命名规则:

  • 第一个字符必须是字母、下划线或一个美元符号
  • 其他字符是字母、下划线、美元符号或数字
  • 采用驼峰大小写格式命名
  • 不能使用关键字、保留字、true、false和null用作标识符

关键字:

break do instanceof typeof
case else new var
catch finally return void
continue for switch while
debugger(第5版新增) function this with
default if throw delete
in try    

保留字(第3版):

abstract enum int short
boolean export interface static
byte extends long super
char final native synchronized
class float package throws
const goto private transient
debugger implements protected volatile
double import public  

第5版在非严格模式下运行时的保留字缩减为下列:

class enum extends super
const export import  

严格模式下第5版对下列保留字加以限制:

implements package public interface
private static let(第5版新增) protected
yield(第5版新增)      

在严格模式下,第5版对eval和arguments也施加了限制,不能作为标识符或属性名,否则会抛出错误

数据类型

NaN

即非数值(Not aumber) 是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况。  

特点:

  • 任何涉及NaN的操作都会返回NaN                   
  • NaN与任何值都不相等,包括本身

JavaScript定义了isNaN()函数,任何不能转换为数值的都返回为true

分子分母都为0相除返回NaN,如0/0返回NaN

Null

只有一个值的数据类型,为null,逻辑角度null表示一个空对象指针,使用typeof操作符检测null值返回object

Undefined

只有一个值,及特殊的undefined     

  • 变量未初始化
  • 变量未定义时     
  • 函数无明确返回值

测试某个值是否未定义使用“===”操作符,“==”操作符认为undefined值等于null

数值加undefined为NaN,如10+undefined为NaN

Infinity

Infinity 属性用于存放表示正无穷大的数值。

Infinity 是全局对象的一个属性,即它是一个全局变量。

Infinity 的初始值是Number.POSITIVE_INFINITY。Infinity (正无穷大)大于任何值。该值和数学意义上的无穷大很像,例如任何正值乘以 Infinity 为 Infinity , 任何数值(除了Infinity 和 -Infinity)除以 Infinity 为 0。

规则:

  • Infinity 与0相乘为NaN
  • Infinity与Infinity相乘为Infinity
  • Infinity与Infinity相除为NaN
  • 非零有限数被零除,结果是Infinity(正负取决于有符号操作数的符号)
  • Infinity被任何非零数值除,结果是Infinity(正负取决于有符号操作数的符号)
  • 无穷大值对有限大值求模,结果为NaN,如Infinity%23结果为NaN
  • 有限大值对无限大值求模,结果为有限大值,如23%Infinity结果为23
  • Infinity加-Infinity,结果为NaN
  • +0加-0,结果为+0
  • Infinity减Infinity,结果为NaN
  • -Infinity减-Infinity,结果为NaN
  • Infinity减-Infinity,结果为Infinity
  • -Infinity减Infinity,结果为-Infinity
  • -0减-0,结果为+0

浮点数值

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机的将浮点数值转换为整数值

浮点数值的最高精度是17位小数

数值范围

ECMAScript能够表示的最小数值存在Number.MIN_VALUE中,在大多数浏览器中,这值为5e-324;能够表示的最大数值保存在Number.MAX_VALUE中,大多数浏览器中,这值为1.7976931348623157e+308。超出范围,值将自动转换成Infinity,可以使用isFinite()函数判定,在范围之内返回true。

分母为0相除返回Infinity,如10/0返回Infinity

数值转换

有3个函数把非数值转换为数值:Number()、parseInt()、parseFloat()

Number()函数的转换规则:

  • 如果是Boolean值,true和false将分别转换为1和0
  • 如果是null值,返回0
  • 如果是undefined,返回NaN
  • 如果是字符串,遵循下列规则:

如果字符串只包含数字,则将转换为十进制数值(前导若有零则会忽略)

如果字符串中包含有效的浮点格式,则将其转换为对应的浮点数值(前导若有零则会忽略)

如果字符串中包含有效的十六进制格式,则将其转换为相同大小的十进制整数值

如果字符串是空,则将其转换为0

如果字符串包含除上述格式之外的字符,则将其转换为NaN

  • 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值

Number类型提供一些用于将数值格式化为字符串的方法:

toFixed():按照指定的小数位返回数值的字符串表示,可以表示带有0-20个小数位的数值

toExponential():返回以指数表示法表示的数值的字符串形式,接受一个参数且该参数同样也是指定输出结果中的小数位数

toPrecision():返回值看哪种格式最适合,接受一个参数,即表示数值的所有数字的位数(不包括指数部分),,可以表示1-21位小数

	var num=10;
	console.log(num.toFixed(2));//"10.00"
	console.log(num.toExponential(1));//"1.0e+1"
	console.log(num.toPrecision(1));//"1e+1"
	console.log(num.toPrecision(2));//10
	console.log(num.toPrecision(3));//10.0

parseInt()函数转换规则:

  • 转换字符串时,忽略前面的空格,直至找到第一个非空格字符,若果第一个字符不是数字字符或者负号,parseInt()返回NaN
  • 如果为空字符串,parseInt()返回NaN
  • 如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完或遇到第一个非数字字符,如“1234blue”会转换为1234,“22.5”会转换为22
  • parseInt()能识别各种整数格式,0x开头且后跟数字字符是十六进制、0开头且后跟数字字符是八进制,ECMAScript5已不具有解析八进制能力,如070会认为是70
  • 为了消除上述困惑,parseInt()函数提供第二个参数:转换时使用的基数(即多少进制),如parseInt("AF",16)结果为175,parseInt("AF")结果为NaN

parseFloat()函数转换规则:

  • parseFloat()也是从第一个字符开始解析每个字符,直到字符串末尾或者遇到一个无效的浮点数字字符为止
  • parseFloat()始终会忽略前导0,十六进制格式的字符串则始终被转换为0,由于parseFloat()只解析十进制,因此没有用第二个参数指定基数的用法
  • 如果字符串包含的是一个可解析为整数的数(没有小数点或小数点后面都是0),parseFloat()会返回整数

位操作符

按位非(~):

按位非操作本质:操作数的负值减一

var num=25;
var num1=~num;
alert(num1);//-26

按位与(&):

均1为1

var result=25 & 3;
alert(result);//1

底层操作:

25 = 0000 0000 0000 0000 0000 0000 0001 1001

  3 = 0000 0000 0000 0000 0000 0000 0000 0011


and=0000 0000 0000 0000 0000 0000 0000 0001

按位或(|):

均0为0

var result = 25 | 3;
alert(result);//27

底层操作:

25 = 0000 0000 0000 0000 0000 0000 0001 1001

  3 = 0000 0000 0000 0000 0000 0000 0000 0011 


or = 0000 0000 0000 0000 0000 0000 0001 1011

按位异或(^):

两个数相同(都为1或都为0)为0,不同(一个数为1一个数为0)为1

var result = 25 ^ 3;
alert(result);//26

底层操作:

25 = 0000 0000 0000 0000 0000 0000 0001 1001

  3 = 0000 0000 0000 0000 0000 0000 0000 0011 


xor = 0000 0000 0000 0000 0000 0000 0001 1010

布尔操作符

逻辑非(!):

逻辑非操作符遵循下列规则:

  • 若操作数是一个对象,返回false
  • 若操作数是一个空字符串,返回true
  • 若操作数是数值0,返回true
  • 若操作数是任意非0数值(包括Infinity),返回false
  • 若操作数是null或NaN或undefined,返回true

逻辑与(&&):

均真为真

逻辑与操作符遵循下列规则:

  • 如果第一个操作数是对象,则返回第二个操作数
  • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象
  • 如果两个操作数都是对象,则返回第二个操作数
  • 如果第一个操作数是null,则返回null
  • 如果第一个操作数是NaN,则返回NaN
  • 如果第一个操作数是undefined,则返回undefined
  • 如果第一个操作数能够决定结果,则不会再对第二个操作数求值,如第一个操作数是false,则无论第二个操作数是什么值都返回false

逻辑或(||):

均假为假

逻辑或操作符遵循下列规则:

  • 如果第一个操作数是对象,则返回第一个操作数
  • 如果第一个操作数的求值结果为false,则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数是null,则返回null
  • 如果两个操作数是NaN,则返回NaN
  • 如果两个操作数是undefined,则返回undefined
  • 如果第一个操作数能够决定结果,则不会再对第二个操作数求值,如第一个操作数是true,则无论第二个操作数是什么值都返回true

猜你喜欢

转载自blog.csdn.net/LIUHONGLIAN915/article/details/81878052