javascript权威指南学习笔记3
2016-03-17 15:08
375 查看
今天看到第四章,记录一下其中的几个点,俗话说:好记性不如烂笔头嘛。
4.9 in运算符和instanceof运算符
in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有名为左操作数值的属性名,那么表达式返回true,例如:
instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false。比如:
4.10 逻辑表达式(&&、||、!)
这里有一些注意事项:&&的操作数不一定是布尔值,可以是一些真值或假值(null等),要牢记它的判断顺序,如果左侧值是假,则不判断右侧,直接返回左侧的结果。否则,返回右侧的值。即“”短路“。
而||的判断顺序则是如果左侧为真,那么返回这个真值,否则再计算右侧的值,返回。
4.12 表达式计算(eval)
eval()只是一个参数。如果传入的参数不是字符串,它直接返回这个参数。如果是字符串,它会把字符串当成javascript代码进行编译,如果编译失败则抛出一个语法错误异常(SyntaxError)。如果编译成功,则开始执行,并返回字符串中最后一个表达式或语句的值,如果最后一句没有值,则返回undefined。如果字符串抛出异常,这个异常将把该调用传递给eval()。
关于eval()的作用域问题:eval查找变量的值和定义新变量和函数的操作和局部作用域中的代码完全一样。
eval具有更改局部变量的能力。主要看示例吧:
而严格意义下的eval不能定义新的局部变量。将eval列为保留字,使之更像一个运算符。
4.13 其他运算符
条件运算符 ?: 等价于if else的简写
typeof运算符 常用写法:(typeof value=="string")?"'"+value+"'":value;
delete运算符 var声明的变量是无法删除的
void运算符<a href="javascript:void window.open();">打开一个新窗口</a>
4.9 in运算符和instanceof运算符
in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有名为左操作数值的属性名,那么表达式返回true,例如:
var point={x:1,y:1};//undefined "x" in point;//true "z" in point;//false "toString" in point;//true var data=[7,8,9];//undefined "0" in data;//true "1" in data;//true 1 in data;//true 3 in data;//false
instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false。比如:
var d=new Date();//undefined d instanceof Date;//true d instanceof Object;//true d instanceof Number;//false var a=[1,2,3];//undefined a instanceof Array;//true a instanceof Object;//true a instanceof RegExp;//false
4.10 逻辑表达式(&&、||、!)
这里有一些注意事项:&&的操作数不一定是布尔值,可以是一些真值或假值(null等),要牢记它的判断顺序,如果左侧值是假,则不判断右侧,直接返回左侧的结果。否则,返回右侧的值。即“”短路“。
var o={x:1}; var p=null; o&&o.x;//1 p&&p.x;//null
而||的判断顺序则是如果左侧为真,那么返回这个真值,否则再计算右侧的值,返回。
var max=max_width||preference.max_width||500;//默认参数 //将o的成员属性复制到p中,并返回p function copy(o.p){ p=p||{};//如果像参数p中没有传入任何对象,则使用一个新创建的对象 //函数体内的主逻辑 }
4.12 表达式计算(eval)
eval()只是一个参数。如果传入的参数不是字符串,它直接返回这个参数。如果是字符串,它会把字符串当成javascript代码进行编译,如果编译失败则抛出一个语法错误异常(SyntaxError)。如果编译成功,则开始执行,并返回字符串中最后一个表达式或语句的值,如果最后一句没有值,则返回undefined。如果字符串抛出异常,这个异常将把该调用传递给eval()。
关于eval()的作用域问题:eval查找变量的值和定义新变量和函数的操作和局部作用域中的代码完全一样。
eval具有更改局部变量的能力。主要看示例吧:
var geval=eval; var x="global",y="global"; function f(){ var x="local"; eval("x+='changed';"); return x; } function g(){ var y="local"; geval("y+='changed';"); return y; } console.log(f(),x);// localchanged global console.log(g(),y);// local globalchanged
而严格意义下的eval不能定义新的局部变量。将eval列为保留字,使之更像一个运算符。
4.13 其他运算符
条件运算符 ?: 等价于if else的简写
typeof运算符 常用写法:(typeof value=="string")?"'"+value+"'":value;
delete运算符 var声明的变量是无法删除的
void运算符<a href="javascript:void window.open();">打开一个新窗口</a>
相关文章推荐
- js 增加控件
- chart.js图表 传值问题
- js读取解析JSON类型数据
- js调用百度地图API创建地图
- JavaScript Array(数组) 对象
- JS原生追加子节点
- 处理滚动条置底的JS代码
- json数据传输有感
- 跨域数据操作jsonp
- JSONKit EXC_BAD_ACCESS
- JavaScript 字符串(String) 对象
- JSP中的EL表达式详细介绍
- JS中for循环变量作用域
- js学习随笔
- HTML5 - 使用<output>标注JavaScript返回值
- Jsp与servlet的区别
- xUtils怎么post请求上传json数据
- JS转换HTML转义符
- JavaScript Number 对象
- [JSOI2008]最大数maxnumber(栈&二分查找)