JavaScript深入学习[1]
来源:互联网 发布:流体力学分析软件 编辑:程序博客网 时间:2024/05/21 21:49
一、语句与表达式
{ foo: fn() }
这段代码有二义性
1. ‘foo:’可以看作标签 ,{}看做代码块,这时是语句
2.对象字面量,这时是表达式
function fn(){}
这段代码也具有二义性
1.看做函数声明(语句)
2.具名函数表达式
因此以上两端代码用eval解析时应当添加括号来作为表达式输出值
eval('({ foo : fn() })');eval('(function fn(){})');
二、分号自动插入机制(ASI)
在以下情况中会自动插入分号
1.换行符后跟非法字符
例如 :
var a = 1console.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//truetypeof 1 == "number";//truetypeof "1" == "string";//truetypeof true == "boolean";//truetypeof [] == "object";//truetypeof {} == "object";//true[] instanceof Array;//true{} instanceof Array; //true
2.真值假值
0 ,”(空字符串),false ,undefined ,null 都为假值;其余为真值;
3.== 与 ===
===为严格相等,类型不同则必定不等;
==为宽松相等,类型不同会先进行类型转换;
undefined == null0 == false0 == """" == 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
阅读全文
1 0
- JavaScript深入学习[1]
- 前端学习实践笔记--JavaScript深入【1】
- 深入学习javascript
- 深入学习javascript
- javascript 深入学习之一
- javaScript深入学习[2]
- javaScript深入学习[3]
- 深入学习javascript
- javascript学习:深入学习变量
- 开始深入的学习javascript
- javascript 深入 学习
- 深入学习javascript(Function Array)
- JavaScript 对象深入学习总结
- JavaScript 对象深入学习总结
- JavaScript 对象深入学习总结
- 深入学习javascript--Module模式
- javascript深入学习之二
- 深入JavaScript学习底层内容
- 阿里云设置远程连接reids
- 从零开始前端学习[13]:伪类选择器
- 7.排序、聚合函数、分组查询
- angularjs速成学习个人理解_2表达式
- 敌兵布阵(简单线段树)
- JavaScript深入学习[1]
- vue-cli 路由嵌套
- 第一篇:对jni和NDK的认识
- java
- HDU 1816 Get Luffy Out *(2-SAT+二分)
- 862A. Mahmoud and Ehab and the MEX
- POJ3273 Monthly Expense 二分法
- 人工智能入门简介及行业分析
- SAS数据集如何将为负数的部分,变为正数