JavaScript深入学习[1]
2017-09-20 23:04
246 查看
一、语句与表达式
{ foo: fn() }
这段代码有二义性
1. ‘foo:’可以看作标签 ,{}看做代码块,这时是语句
2.对象字面量,这时是表达式
function fn(){}
这段代码也具有二义性
1.看做函数声明(语句)
2.具名函数表达式
因此以上两端代码用eval解析时应当添加括号来作为表达式输出值
eval('({ foo : fn() })'); eval('(function fn(){})');
二、分号自动插入机制(ASI)
在以下情况中会自动插入分号
1.换行符后跟非法字符
例如 :
var a = 1 console.log(a);
由于‘c’在 ‘1’后为非法字符所以会自动添加换行
陷阱:
fn() ["aaa"].length;
此处由于‘[’合法所以 ‘aaa’会看作是fn返回值得属性
陷阱 :
function(){ return {} }
此处 ‘return’后会添加分号,最后返回值为 undefined
2.代码片段结束处
例如:
if(a == b){ return a }
此处在 ‘a’ 后会添加分号
3.文件结束处
三、类型比较
1.typeof 和 instanceof
typeof undefined == undefined//true typeof 1 == "number";//true typeof "1" == "string";//true typeof true == "boolean";//true typeof [] == "object";//true typeof {} == "object";//true [] instanceof Array;//true {} instanceof Array; //true
2.真值假值
0 ,”(空字符串),false ,undefined ,null 都为假值;其余为真值;
3.== 与 ===
===为严格相等,类型不同则必定不等;
==为宽松相等,类型不同会先进行类型转换;
undefined == null 0 == false 0 == "" "" == false //所有假值互相宽松相等 '2' == 2 '2.1' == 2.1 //字符串与数字比较转换成数字 NaN !== NaN
对于不是原始类型的,先转换成原始类型
实现 toPrimitive(variety ,type)
参数 type为 ‘number’
1. 调用valueOf()方法 ;
2. 调用toString()方法;
3. 报错;
参数type 为 ‘string’
1. 调用toString()方法;
2. 调用valueOf()方法 ;
3. 报错;
除了Date对象外,其他对象默认为 ‘number’
四、严格模式语法和行为改变
http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
阅读更多相关文章推荐
- 前端学习实践笔记--JavaScript深入【1】
- 深入JavaScript学习底层内容
- Javascript oop深入学习笔记(三)--javascript中类的实现
- 前端复习--javascript 任务队列 与 setTimeout()的深入学习
- 基于 Django1.10 文档的深入学习(28)—— Managing static files(e.g. images, JavaScript, CSS)
- 深入学习JavaScript: apply 方法 详解(转)——非常好
- 深入学习一下JavaScript的三种编解码方式
- (转 Uncle Tom )深入理解javascript(1)学习笔记
- javascript 深入 学习
- JavaScript 对象深入学习总结
- 深入理解javascript学习笔记(一) 编写高质量代码
- 深入学习JavaScript中的Rest参数和参数默认值
- 【破浪学习】深入javascript引擎对脚本的处理过程
- Javascript学习之深入剖析函数调用
- javascript 面向对象深入学习-----(一)
- javascript 深入学习之一
- JavaScript 对象深入学习总结
- 深入学习javascript
- 深入学习JavaScript: apply 方法 详解(转)
- JavaScript 对象深入学习总结