重学JS-第三章基本概念

127 阅读4分钟

1语法

支持严格模式:IE10+,chrome,fire4+,safari5.1+

严格模式不能定义eval或者arguments

2数据类型

判断:typeof

  • undefined

  • boolean

  • string

  • number

  • function

  • object

Undefined类型:声明但未初始化

Null类型:表示一个空对象指针

布尔类型:其他转换为false(空字符串,0或者NAN,null,undefined)

Number类型:支持八进制,十六进制,在计算的时候,都会转化为十进制。 

  1. 判断是否有穷:isFinite()
  2. NaN和任何数都不相等,包括自己;isNaN()
  3. 数值转换:
  • 数值转换函数parseInt()  parseFloat() Number();前两个只能把字符串变为数值,Number()适用于任何数据类型。parseInt() parseFloat()解析到第一个无效字符为止。

  • string转为number:

  • 自动去掉前面的0

  • 空字符串转为0

  • 非法NaN

  • 对象:

  • 先调用valueOf,再调用toString

String类型

制表符
制表符\t是C++的转义符,相当于键盘上按下TAB键之间的距离,一般为8个空格。
出现问题
使用制表符后显示的长度不一致
原因
使用制表符是把输出的切入点移动到下一个能被8整除的位置上。
即当打印小于八格的结果,用空格补足八格再打印下一个结果;当大于等于八格,小于十六格,补足十六格;以此类推。

\r 的意思是: 回车。将当前位置移到本行的开头。 \f的意思是:换页。将当前位置移到下一页的开头 \b 是让光标回退一位,下一次输入字符时,会把光标所在位置的字符替换掉。

数字,布尔,对象,字符串都有toString(),对于数字toString支持输出二进制、八进制、十六进制

null和undefined的toString()返回其本身

Object类型

constructor:保存着用于创建当前对象的函数

var obj = new Object()
obj.constructor
输出:ƒ Object() { [native code] }

function Person(){}
var person = new Person()
输出:ƒ Person(){}

hasOwnProperty(name):用于检给定的属性再当前实例中是否存在(而不是再实例的原型中);参数是字符串类型

person.hasOwnProperty('name')  //false
person.name = 'lan'  
person.hasOwnProperty('name')  //true

propertyIsEnumerable():是否可使用for-in枚举

toString()

valueOf()对象的字符串,数值,布尔值表示

isPrototypeOf()调用对象是否在另一个对象的原型链上。

function Baz() {}
var baz = new Baz();
console.log(Baz.prototype.isPrototypeOf(baz)); // true

3操作符

3.1一元操作符:++ -- + -

++和--只能应用于数字

+和-在进行非数值操作操作的时候,调用Number()
在进行对象操作的时候,先调用valueOf再调toString

3.2位操作符

按位与&、按位或|、按位非~、按位异或^,左移<<,有符号右移>>,无符号右移>>>

JavaScript 能够准确表示的整数范围在**-2^53 到 2^53 之间**(不含两个端点), 超过这个范围,无法精确表示这个整数。

左移:
2<<5   //64
-2<<5  //-64
有符号右移:
-64>>5  //-2
无符号右移:
-64>>>5  //134217726

3.3布尔操作符

逻辑非!

操作数是非空字符串,对象,非0数值,返回false

操作数是空字符串,0,null,undefined,NaN返回true

将表达式强制转换成布尔运算!!

逻辑与&&(短路操作符)

1.第一个操作数是对象,返回第二个操作数

2.两个操作数都是对象,返回第二个

3.第二个操作数是对象,只有第一个操作数结果是true的时候,才返回该对象

4.第一个操作数是null,undefined,NaN时,返回其本身

逻辑或||****(短路操作符)

1.第一个操作数是对象,返回第一个操作数

2.两个操作数都是对象,返回第一个操作数

3.两个操作数都是null,undefined,NaN时,返回其本身

3.4乘性操作符

乘*

结果是NaN:有一个是NaN,或者Infinity和0相乘

Infinity和Infinity相乘,返回本身

 除/

结果是NaN:有一个是NaN,或者Infinity和Infinity相除,0被0除

非0有限数被0除,结果是Infinity或者-Infinity(符号取决于被除数)

27391793/0    //Infinity

%

结果是NaN:Infinity被Infinity除,被除数无穷大除数有限大,除数是0

被除数有限大,除数无限大,结果是被除数

Infinity%10   //NaN
10%Infinity   //10

3.5加性操作符

加+ 减-

3.6关系操作符

< > <= >=

3.7相等操作符

==    !=

===   !==

null==undefined  //true

3.8条件操作符

? :

3.9赋值操作符

=

*=,/=,%=,+=,-=,<<=,>>=(有符号右移赋值),>>>=(无符号右移赋值)

3.10逗号操作符

声明变量
var num1 =2, num2 =5;
赋值
var num = (0,1,2,3,4)  // num=4

4语句

label语句:用于和break,continue跳出循环

with语句:将代码作用域设定在一定对象中。严格模式下不能使用,会降低性能,避免使用