前端宝典【犀牛书】04(表达式计算)

一、eval()类似于局部作用域,作者个人理解是块级作用域

如果 在最 顶层 代码 中 调用 eval(), 当然, 它会作用于 全局 变量 和 全局 函数。

 

var foo = function( a){ eval( a); };

foo(" return; ");=>全局 上下 文中 使用 return 会 抛出 语法 错误: return not in function

var geval = eval; // 使用 别名 调用 eval 将是 全局 
eval var x = "global", y = "global"; // 两个 全局 变量 
function f() { 
    // 函数 内 执 行的 是 局部 
     eval var x = "local";   // 定义 局部 变量 
     eval(" x += 'changed';"); // 直接 eval 更改 了局 部 变量 的 值
     return x; // 返回 更改 后的 局部 变量 
} 
function g() { // 这个 函数 内 执行 了 全局 
     eval var y = "local"; // 定义 局部 变量 
     geval(" y += 'changed';"); // 间接 调用 改变 了 全局 变量 的 值 
     return y; // 返回 未 更改 的 局部 变量 
} 
console. log( f(), x); // 更改 了局 部 变量: 输出" localchanged global": 
console. log( g(), y); // 更改 了 全局 变量: 输出" local globalchanged":

typeof运算符

       返回操作数类型的字符串

 

delete运算符:删除对象的属性,,数组的值

       删除 属性 或者 删除 数组 元素 不仅仅是 设置 了 一个 undefined 的 值。 当 删除 一个 属性 时, 这个 属性 将不 再 存在。 读取 一个 不存在 的 属性 将 返回 undefined, 但是 可以 通过 in 运算符( 见 4. 9. 3 节) 来 检测 这个 属性 是否 在 对象 中 存在。

       delete 希望 他的 操作 数 是 一个 左 值, 如果 它 不是 左 值, 那么 delete 将不 进行 任何 操作 同时 或者不存在的属性(已经删除过的属性)返回 true。 否则, delete 将 试图 删除 这个 指 定的 左 值。 如果 删除 成功, delete 将 返回 true。 然而 并不是 所有 的 属性 都可 删除, 一些 内置 核心 和 客户 端 属性 是 不能 删除 的, 用户 通过 var 语句 声明 的 变量 不能 删除。 同样, 通过 function 语句 定义 的 函数 和 函数 参数 也不能 删除。

 

void运算符

     忽略 计算 结果 并 返回 undefined。 由于 void 会 忽略 操 作数 的 值, 因此 在 操作 数 具有 副作用 的 时候 使用 void 来 让 程序 更具 语义。

      < a href=" javascript: void window. open();"> 打开 一个 新 窗口</ a>

 

,运算符

 总是 会计 算 左侧 的 表达式, 但 计算 结果 忽略 掉, 也就是说, 只有 左侧 表达式 具有 副作用, 才会 使用 逗号 运算符 让 代码 变得 更 通顺。 逗号 运算符 最 常用 的 场景 是在 for 循环 中( 见 5. 5. 3 节), 这个 for 循环 通常 具有 多个 循环 变量:

    //for 循环 中的 第一个 逗号 是 var 语句 的 一部分 //第二个 逗号 是 逗号 运算符

    //它将 两个 表达式( i++ 和 j--) 放在 一条( for 循环 中的) 语句 中

    for( var i= 0, j= 10; i < j; i++, j--)

       console. log( i+ j);

 

posted @ 2022-07-10 16:45  肥瘦皆宜  阅读(54)  评论(0编辑  收藏  举报