ECMAScript 5 引入严格模式 Strict mode ——为JAvaScript定义了一种不同的解析&执行模型
在严格模式下,ECMAscript 3 中的一些不明确的行为将会被处理&&对某些个不安全的操作 also
抛出错误
在整个脚本中应用严格模式——顶部添加代码:
"use strict";
——编译指示,告诉支持的 JavaScript 引擎切换到严格模式
——为了不破坏 ECMAscript 3 语法而特定选定的
函数内部 also can use ——指定函数在严格模式下执行:
function myFunction() {
"use strict";
//.......
}
严格模式下,JavaScript 的执行结果会有很大不同
支持严格模式: IE 10.0、 Firefox 4+、Safari 5.1+、Opera 12+、Chrome
break do instanceof typeof case else new var
catch finally return void continue for switch while
debugger function this with default if throw delete
in try
——松散类型【可以用来保存人任何类型的数据】= each 变量仅仅是一个用于保存值的占位符
使用 var 操作符定义的变量——成为定义该变量作用域中的局部变量
e.g
function myFunction() { var str = "Hey"; //局部变量 } myFunction(); alert(str); // error!!! /* * 变量 str 在函数中使用 var 定义 * myFunction()被调用时,创建 str 变量并为其赋值 “Hey" * 之后,变量 str 立即被销毁 alert(str) 出错 */ //省略 var 操作符 创建全局变量 function myFunction() { str = "Hey"; //局部变量 } myFunction(); alert(str); // “Hey” str 可以在函数外部任何地方被访问
!!!以上并不推荐!!!
——难维护
——混乱
——严格模式下 抛出 ReferenceError 错误
var str = "Hey", name = true, inf = 233; //在严格模式下,不能定义名为 eval、arguments 的变量——会报语法错误
5 中基本数据类型
Undefined Null Boolean Number String
1种复杂数据类型
Object——由一组无序名值对组成
Chrome 浏览器中测试
Undefined 类型——只有一个值:undefined
Null 类型——只有一个值的数据类型:null
!!!如果定义的变量将在以后保存对象——最好初始化为 null
【so 只要直接检查 null 值就可以知道相应的变量是否已经保存了一个对象的引用】
!!!null 和 undefined 用途完全不同
——只要当想要保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存 null 值
——体现 null 作为空对象指针、进一步区分 null 和 undefined
Boolean:只有 2 个 字面值: true 和 false【区分大小写】
!!!与数字值1 和 0 不是一回事儿
!!!如上——str 被自动转换为Boolean 值 true!!!
在控制流中存在此现象,可能会完全改变原程序的流程——错误的使用一个对象BUT not a Boolean 值
Number 类型:
IEEE754格式表示整数和浮点数(双精度数值)
var intNumber = 66; //十进制直接输入 var octalNumber = 062; //八进制第一位必须是 0 零 //无效时直接解析为十进制 var ocN1 = 069; //无效八进制——解析为十进制 69 var ocN2 = 09; //无效,9
!!! 八进制字面量在严格模式下无效!!! 支持 JavaScript 引擎会抛出错误
十六进制字面值前两位必须是 0x, 后面【0-9 A-F|a-f】
var hexNumber0 = 0xB; //十六进制 11 var hexNumber1 = 0X2a;
算数运算时,all 以八进制 和 十六进制表示的数值最终转换为十进制数值
!!! 正零(+0) 和 负零 (-0) 相等
浮点数值:必须包含小数点
!!! 保存浮点数值需要的内存空间是保存 整数值的 2 倍——ECMAscript 会将其转换为整数值
浮点数值最高精度 17 为小数
!!!算数运算时,其精度差于整数
e.g 0.1 + 0.2 = 0.30000000000000004【15个0】!!!! 不是0.3呀!!!
——IEEE 754 的通病~~~~
数值范围:
Number.MIN_VALUE: 5e-324 ( 大多 browser 中)
Number.MAX_VALUE:1.7976931348623157e+308 ( 大多 browser 中)
超出JavaScript数值范围时:自动转换为特殊的 正负Infinity(+-)
此时该数无法参与下次运算
use isFinite() 函数判断是否在范围内——之间时 return true, 超出 return false
NaN:Not a Number
——原本想要返回数值的操作数,未能返回数值时【避免抛出 error】
e.g 5 / 0 return NaN 而不会出现错误以停止代码执行
——任何涉及 NaN 的操作 都会 return NaN
——NaN 与任何值都不相等 include NaN 本身
以上,ECMAscript 定义了 isNaN() 函数
isNaN 确定参数是否“不是数值”
↗可以看出将参数转换为数值。不是数值的值会直接转换为数值“12”, true
任何不能被转换为数值的值都会返回 true;
数值转换
Number()、parseInt()、parseFloat()
以上 3 个函数能够将非数值转换为数值
Number() 在转换字符串时有点复杂&&不大合理
处理整数时often use parseInt()
——更多的看其是否符合数值模式
如上 图 3 八进制没有依然忽略 0 直接十进制显示 ECMAscript 5 中
为了消除上述困惑——指定基数
parseFloat()基本原理同上 BUT 始终忽略第一个“0”
——由 0 or 多个 16 位的 Unicode 组成的字符串 “” ‘’ 均可
字符字面量:
——字符串是不可变的
——一旦创建,其值不能改变
——要改变变量保存的字符串,首先销毁原字符串
——再用另外一个包含新的值字符串填充该变量
var str = "Hey Jude"; str = str + "Do make sad";
way 1: toString() 方法
——return 相应值的字符串表现
Number、Boolean、String、Object 都有toString() 方法
!!!BUT null 和 undefined 值没有此方法!!!
——多数情况下不用传参
——调用数值时,传递一个参数:输出数值的基数
——默认情况下,以十进制格式返回数值的字符串表示
——传递参数以指定的任意有效进制格式表示字符串值
way 2: String()
——不知道要转换的值是不是 null or undefined 时,use String()
——可以将任何类型的值转换为字符串
规则如下:
—— if 值有 toString() 方法,调用该方法
—— if 值 是 null , return “null”
—— if 值 是 undefined, return “undefined”
—— 一组数据和功能的集合
—— 可以通过执行 new 操作符 + 要创建的对象类型名称来创建
—— 创建 Object 类型的实例&&为其添加属性和方法,即可创建自定义对象
var obj = new Object(); //如果不给构造函数传递参数,可以省略“ () ” var obj = new Object; //有效——不推荐 //Object 是所有其实例的基础
Object 每个实例都具有的属性&方法
——Constructor: 构造函数 保存用于创建当前对象的函数
——hasOwnProperty(propertyName):检查给定属性在当前对象实例中【not in 实例原型】
是否存在。参数的属性名必须以字符串形式指定
——isPrototypeOf(object):检查传入的对象是否是另一个对象的原型
——propertyIsEnumberable(propertyName):检查给定属性是否能够使用 for-in 语句来枚举
参数的属性名必须以字符串形式指定
——toLocaleString(): return 对象的字符串表示,该字符串与执行环境地区对应
——toString(): return 对象的字符串表示
——valueOf(): return 对象字符串、数值、布尔值表示。usually 同 toString() 返回值相同
原文:https://www.cnblogs.com/haixiaomei/p/js01.html