《JavaScript高级程序设计》读书笔记-第三章(基本概念)

2019-06-15  本文已影响0人  极奏

变量

function test(){
  var message = 'hi'
}
test()
alert(message)
//message is not defined
 var message = 'hi',
     found   = false,
     age     = 29 

在严格模式下,不能定义名为evalarguments的变量,否则会导致语法错误

typeof操作符

Undefined

var message
alert( message == undefined ) //true

等于

var message = undefined
alert( message == undefined ) //true

但是我们没必要这么做

var message
alert(message) //'undefined'
alert(age)     //错误
var message
alert(typeof message ) //'undefined'
alert(typeof age )     //错误

Null类型

alert(null == undefined) //true

null和undefined的用途完全不同,如果保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值,这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined

alert(null === undefined) //false

Boolean类型

var message = 'Hello world!'
var messageAsBoolean = Boolean(message)
数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 ' '(空字符串)
Number 任何非零数字值 0和NaN
Object 任何对象 null
Undefined 不适用 undefined

Number类型

var intNum = 55 //整数
var octalNum1 = 070 //八进制的56
var octalNum2 = 079 //无效的八进制数值——解析为79
var octalNum3 = 08 //无效的八进制数值,解析为8

八进制字面量在严格模式下是无效的,会导致支持的JavaScript引擎抛出错误

var hexNum1 = 0xA //十六进制的10
var hexNum2 = 0x1f //十六进制的31

浮点数值

var floatNum1 = 1.1
var floatNum2 = 0.1
var floatNum3 = .1

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

var floatNum = 3.125e7 //等于31250000

例如:0.1+0.2的结果不是0.3

这是使用基于IEEE754数值的浮点计算的通病

数值范围

var result = Number.MAX_VALUE+Number.MAX_VALUE
console.log(isFinite(result)) //false

NaN

console.log(NaN === NaN) //false

数值转换

Sting类型

var lang ='Java'
lang = lang + 'Script'

实现这个操作的过程如下:
1、创建一个能容纳10个字符的新字符串
2、在这个字符串中填充'Java'和'Script'
3、销毁原来的字符串'Java'和字符串'Script'

销毁也是某些旧版本的浏览器中拼接字符串时速度很慢的原因所在

var value1 = 10
var value2 = true
var value3 = null
var value4
alert(String(value1))  //'10'
alert(String(value2))  //'true'
alert(String(value3))  //'null'
alert(String(value4))  //'undefined'

Object类型

var o = new Object()

如果不传参的话,可以省略圆括号,但是不推荐

var o = new Object  //有效,但是不推荐

Object类型是所有它的实例的基础。换句话说,Object类型所具有的任何数学和方法也同样存在于更具体的对象中

操作符

一元操作符
var age = 29
++age

与以下操作的效果相同

var age = 29
age = age + 1

递减操作符形式相同

执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。(在计算机科学领域,这种情况通常被称作副效应)

前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至右被求值

var num1 = 2
var num2 = 20
var num3 = --num1 + num2   //等于21
var num4 = num1 + num2     //等于21

后置递增和递减操作符,递增和递减操作是在包含他们的语句被求值之后才执行的

位操作符

ECMAScript会尽力向我们隐藏所有这些信息,如下面代码所示

var num = -18              //1111 1111 1111 1111 1111 1111 1110 1110
alert(num.toString(2))     //'-10010'
按位非(NOT)
var num1 = 25
var num2 = ~num1
alert(num2)       //-26
按位与(AND)
var result = 25 & 3
alert(result)  //1
按位或(OR)
var result = 25 | 3
alert(result)    //27
按位异或(XOR)
var result = 25 ^ 3
alert(result)  //26
左移
var oldValue = 2                  //等于二进制的10
var newValue = oldValue << 5     //等于二进制的1000000,十进制的64

在向左移动后,原数值的右侧多出了5个空位。左移操作会以0来填充这些空位,以便得到的结果是一个完整的32位二进制数

无符号的右移
var oldValue = 64
var newValue = oldValue >>> 5
有符号的右移

保留符号位

var oldValue = 64
var newValue = oldValue >> 5
布尔操作符

布尔操作符一共有3个:非(NOT)、与(AND)和或(OR)

var result = true && false

他遵循下列规则:

第一个操作数 第二个操作数 结果
对象 - 第二个操作数
true 对象 第二个操作数
false 对象 -
对象 对象 第二个操作数

如果一个操作数是null、NaN、undefined则返回null、NaN、undefined

不能在逻辑与操作中使用未定义的值。

var found = true
var result = (found && someUndefinedVariable)   //发生错误
alert(result)                                  //不会执行
逻辑或( || )

遵循的规则与逻辑与相似
如果两个操作数都是null、NaN、undefined则返回null、NaN、undefined

var found = false                               //false
var result = (found || someUndeFinedVariable)  //会发生错误
alert(result)                                 //不会执行
乘性操作符
乘法

如果参加乘法计算的某个操作数不是数值,后台会先使用Number()转型函数将其转换为数值

var result = 34 * 56

在处理特殊值的情况下:
1、如果有一个操作数是NaN,则结果是NaN
2、如果是Infinity与0相乘,则结果是NaN
3、如果Infinity与非0数值相乘,则结果是Infinity或-Infinity
4、如果不是数值,则在后台调用Number()将其转换为数值

除法
var result = 66 / 11

在处理特殊值的情况下:
1、如果有一个操作数是NaN,则结果是NaN
2、如果有一个操作数是NaN,则结果是NaN
3、如果是Infinity被Infinity除,则结果是NaN
4、如果零被零除,则结果是NaN
5、如果是非零的有限数被零除,则结果是Infinity或-infinity
6、如果不是数值,则在后台调用Number()将其转换为数值

相等操作符

ECMAScript的解决方案就是提供两组操作符:
相等和不相等

全等和不全等

for-in循环

函数

function sayHi(name, message){
  alert('Hello' + name + ',' + message)
}

与下面的函数相等

function sayHi(){
  alert('Hello' + arguments[0] + ',' + arguments[1])
}
没有重载
上一篇下一篇

猜你喜欢

热点阅读