《js高级程序设计》第三版——严格模式,语法,数据类型

严格模式 strict mode

在严格模式下,ECMAScript 3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

要在整个脚本中启用严格模式,可以在顶部添加如下代码:
"use strict";

也可以指定函数在严格模式下执行:

function doSomething(){
 "use strict";
 //函数体
} 

支持的的浏览器:
IE10+、Firefox 4+、Safari 5.1+、Opera 12+、Chrome。

es5 严格模式-不能使用的函数:with,callee,caller. 及其他事项

关键字

关键字

保留字

保留字

不同模式下保留字

变量

虽然省略 var 操作符可以定义全局变量,但这也不是我们推荐的做法。
因为在局部作用域中定义的全局变量很难维护,而且如果有意地忽略了 var 操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。
给未经声明的变量赋值在严格模式下会导致抛出ReferenceError 错误。

数据类型(5+1)

5种简单的:
Undefined, Null, String, Number, Boolean

1种复杂的:
Object

检测数据类型-----typeof

返回值
’undefined’ --------------------- 变量未定义
’string’ ---------------------------- 变量为字符串
’number’ ------------------------- 变量为数字
’boolean’ ------------------------- 变量为布尔值
’object’ --------------------------- 变量为对象null
’function’ ------------------------- 变量为函数

null被认为i是一个空的对象引用

在这里插入图片描述

Undefined

第 3 版引入undefined是为了正式区分空对象指针与未经初始化的变量

对于尚未声明过的变量,只能执行一项操作:
即使用 typeof 操作符检测其数据类型. 返回undefined
(对未经声明的变量调用 delete 不会导致错误,但这样做没什么实际意义,而且在严格模式下确实会导致错误)。

undefined == undefined — — true

undefined === undefined — —true

null == null — — true

null === null — — true

undefined == null — — true
undefined === null — — false

因为 undefined 值是派生自 null 值的

Null

逻辑角度看, null 值表示一个空指针对象

在这里插入图片描述

Boolean

在这里插入图片描述
不同类型数据调用 Boolean() 函数返回值:
在这里插入图片描述
在这里插入图片描述

① n/a(或 N/A),是 not applicable 的缩写,意思是“不适用”。

Number

十进制: 随便输.
八进制: 第一位必须为0, 后面为(0 - 7). 若超出, 忽略前导0, 按十进制来

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

十六进制: 前两位必须是0x, 后面为(0 - 9, a - f)

在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值

鉴于 JavaScript 中保存数值的方式,可以保存正零(+0)和负零(-0)。正零和负零被认为相等
+0 == -0 — — true
+0 === -0 — — true

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此 ECMAScript 会不失时机地将浮点数值转换为整数值。eg:
在这里插入图片描述

科学计数法:(针对极大, 极小 数值)

var floatNum = 3.125e7; // 等于 31250000
0.00000000000000003 == 3e-17

  • 在默认情况下,ECMASctipt 会将那些小数点后面带有 6 个零以上的浮点数值转换为以 e 表示法表示的数值
  • 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数
  • 这是使用基于IEEE754 数值的浮点计算的通病
  • 0.1+0.2=0.30000000000000004

ECMAScript能储存的数值范围:
[Number.MIN_VALUE, Number.MAX_VALUE];
在大多数浏览器中也是:
[5e-324, 1.7976931348623157e+308]

Infinity , -Infinity :
在这里插入图片描述

在这里插入图片描述

Number.NEGATIVE_INFINITY: 小于Number.MIN_VALUE的数, 可用 -Infinity替代
Number.POSITIVE_INFINITY: 大于Number.MAX_VALUE的数, 可用Infinity替代

NaN

Not a Number
0 除以 0 , 返回 NaN;
正数 除以 0 , 返回 Infinity;
负数 除以 0 , 返回 -Infinity
表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

特点:

  • 任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN
  • NaN 与任何值都不相等,包括 NaN 本身

isNaN() 函数:
接收到一个值之后,会尝试将这个值转换为数值。
任何不能被转换为数值的值都会导致这个函数返回 true。

alert(isNaN(null)); //false (null可转为0)
在这里插入图片描述

在这里插入图片描述

数值转换

Number()、parseInt()和 parseFloat()

Number() 可以用于 任何数据类型,而另两个函数则专门用于把字符串转换成数值

在这里插入图片描述

Number(010) ; // 8
Number(‘010’) ; // 10
Number(0xf) ; // 15
Number(‘0xf’) ; // 15

parseInt() 函数在转换字符串时,更多的是看其是否符合数值模式
在这里插入图片描述
ECMAScript 3 认为 ‘070’ 是 56(八进制),
ECMAScript 5 认为 ‘070’ 是 70(十进制)
在这里插入图片描述

解决: 为这个函数提供第二个参数:转换时使用的基数(即多少进制)
指定基数后, 前导 0, 0x 可不写
在这里插入图片描述

parseFloat() 与parseInt() 大致相同,
不同:

  • 只第一个小数点有效
  • parseFloat() 只解析十进制值, 没有第二参数做基数, 始终忽略前导0,十六进制字符串会转为0, 十六进制数正常
    在这里插入图片描述
    在这里插入图片描述

String

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Object

一组数据和功能的集合

在 ECMAScript 中,(就像 Java 中的 java.lang.Object 对象一样)Object 类型是所有它的实例的基础
换句话说,Object 类型所具有的任何属性和方法也同样存在于更具体的对象中

在这里插入图片描述
在这里插入图片描述

valueOf和toString方法在Date,Array等对象中有些是被重写过的,所以不同对象调用此方法可能产生的操作不同

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • toString() 和 valueOf(), 区别有待加强理解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值