基本概念
2019-05-15 09:45:04 5 举报
AI智能生成
JavaScript高级程序设计第三章思维导图
作者其他创作
大纲/内容
语法
区分大小写
标识符:不能使用关键字,保留字,true,false,null作为标识符
严格模式
“use script”
关键字和保留字
不可用于标识符
变量
省略操作符 可以定义真正的全局变量
let 局部变量
var 全局变量
const 常量
数据类型
typeof
undefined 未定义
boolean 布尔
string 字符串
number 数值
object 对象
function 函数
Undefined类型
说明该变量未定义也就是没有声明
Null类型
null代表一个空对象指针,typeof会返回object
由于undefined 派生于null 因此
undefined==null (true)
undefined==null (true)
Boolean类型
String
true:非空字符串
false:“”
false:“”
number
true:任何非零
false:0和NaN
false:0和NaN
object
true:任何对象
false:null
false:null
Undefined
true:n/a
false:undefined
false:undefined
Number类型
0开头且符合八进制会被认定是八进制
0x开头会被认定为十六进制
进行算术运算时,八进制和十六进制都会被转为十进制
0x开头会被认定为十六进制
进行算术运算时,八进制和十六进制都会被转为十进制
浮点数
由于浮点数内存开销为整数的两倍,JS会尽量将其转为整数
例如:1.0 1. 都会被转为1
例如:1.0 1. 都会被转为1
浮点数最高精度为17位小数
数值范围
Number.MIN_VALUE:5e-324
Number.MAX_VALUE:1.797693e+308
越界会被处理为Infinity
可以用isFinite()判断
可以用isFinite()判断
NaN
非数值
0/任何数 返回NaN
任何涉及NaN都返回NaN
NaN和任何值不相等
NaN==NaN (false)
数值转换
undefined=> NaN
null=>0
true=>1 false=>0
字符串
111=>111
011=>11
011=>11
有小数点直接转为浮点数
1.1=>1.1
0001.1=>1.1
1.1=>1.1
0001.1=>1.1
‘’=>0
以上之外=>NaN
对象
调用valueOf() 按照之前规则返回
第一个返回结果为NaN 则调用toString() 然后转换为字符串
String类型
toString()
如果变量为null 输出null
如果为undefined 输出undefined
因为这两个值没有tostring方法因此直接返回字面量
如果为undefined 输出undefined
因为这两个值没有tostring方法因此直接返回字面量
Object类型
constructor:保存当前对象的构造函数
hasOwnProperty(propertyName) 检查给定的属性是否在当前对象存在
isPrototypeOf(object) 检查传入对象是否是其原型
propertyIsEnumerable(propertyName):检查原型能否枚举
toLocaleString():将对象转为字符串 和执行环境地区对应
toString():返回对象的字符串表示
{}=>"[object Object]"
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
valueOf():返回对象的字符串、数值或布尔值表示
操作符
一元操作符:只能操作一个值
前置/后置递增/递减 ++/--
放在变量前后分别代表前置后置
放在变量前后分别代表前置后置
num1=20,num2=2
--num1+num2=21 此使num1=19
num1--+num2=22 运算后num1=19
--num1+num2=21 此使num1=19
num1--+num2=22 运算后num1=19
如果应用于非数值类型数据,会先对数据做类型转换
对于对象,先调用valueOf进行类型转换
对于对象,先调用valueOf进行类型转换
一元加减操作符
位操作符
非 ~
与 &
或 |
1 1 =>1
1 0 =>1
0 1 =>1
0 0 =>0
1 0 =>1
0 1 =>1
0 0 =>0
异或 ^
1 1 =>0
1 0 =>1
0 1 =>1
0 0 =>0
1 0 =>1
0 1 =>1
0 0 =>0
左移 >>
右移
有符号>>
无符号 >>>
布尔操作符
逻辑非 !
可叠加
如果操作数是一个对象,返回false;
如果操作数是一个空字符串,返回true;
如果操作数是一个非空字符串,返回false;
如果操作数是数值0,返回true;
如果操作数是任意非0数值(包括Infinity),返回false;
如果操作数是null,返回true;
如果操作数是NaN,返回true;
如果操作数是undefined,返回true
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
alert(!12345); // false
如果操作数是一个对象,返回false;
如果操作数是一个空字符串,返回true;
如果操作数是一个非空字符串,返回false;
如果操作数是数值0,返回true;
如果操作数是任意非0数值(包括Infinity),返回false;
如果操作数是null,返回true;
如果操作数是NaN,返回true;
如果操作数是undefined,返回true
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
alert(!12345); // false
逻辑与 &&
如果第一个操作数是对象,则返回第二个操作数;
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
如果两个操作数都是对象,则返回第二个操作数;
如果有一个操作数是null,则返回null;
如果有一个操作数是NaN,则返回NaN;
如果有一个操作数是undefined,则返回undefined。
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
如果两个操作数都是对象,则返回第二个操作数;
如果有一个操作数是null,则返回null;
如果有一个操作数是NaN,则返回NaN;
如果有一个操作数是undefined,则返回undefined。
逻辑或 ||
如果第一个操作数是对象,则返回第一个操作数;
如果第一个操作数的求值结果为false的情况下才会返回第二个数;
如果两个操作数都是对象,则返回第一个操作数;
如果两个操作数都是null,则返回null;
如果两个操作数都是NaN,则返回NaN;
如果两个操作数是undefined,则返回undefined。
如果第一个操作数的求值结果为false的情况下才会返回第二个数;
如果两个操作数都是对象,则返回第一个操作数;
如果两个操作数都是null,则返回null;
如果两个操作数都是NaN,则返回NaN;
如果两个操作数是undefined,则返回undefined。
乘性操作符
乘 *
除 /
求余 %
加性操作符
+
-
任一为NaN 结果为NaN
关系操作符
>
<
>=
<=
<
>=
<=
相等操作符
相等 ==
true
null == undefined
false == 0
true == 1
"5"==5
false == 0
true == 1
"5"==5
false
NaN == NaN
'NaN' == NaN
undefined == 0
null == 0
'NaN' == NaN
undefined == 0
null == 0
全等 ===
55 === “55” fales
null === undefined false
null === undefined false
条件操作符
variable = boolean_expression ? true_value : false_value;
赋值操作符
/= *= 操作符和等号结合
逗号操作符
一个语句执行多个操作
流控制语句
if
do……while
while
for
for-in
用于可枚举对象 枚举其属性
label
在代码中添加标签 便于后续continue或break使用
let i,j;
loop1:
for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1"
loop2:
for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2"
if (i == 1 && j == 1) {
continue loop1;
}
console.log("i = " + i + ", j = " + j);
}
}
loop1:
for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1"
loop2:
for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2"
if (i == 1 && j == 1) {
continue loop1;
}
console.log("i = " + i + ", j = " + j);
}
}
会在i==1,j==1时 跳回loop1执行
break;continue
with
设定代码作用于到一个特定对象中
大量使用会导致性能下降
大量使用会导致性能下降
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
使用with语句的代码改写成如下所示:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href; }
var hostName = location.hostname;
var url = location.href;
使用with语句的代码改写成如下所示:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href; }
switch
switch 在比较值时使用===而不是==
函数
没有重载(可以自行实现)
如果有同名函数,后一个覆盖前一个
自行实现:通过switch判断参数数量,也就是arguments.length进行分别写操作代码
《secrets of the JavaScript ninja》 中有一个利用闭包的重载实现方法
0 条评论
下一页