摘要

作者: k丶one | 来源:发表于2020-04-15 16:02 被阅读0次

网道

1.什么是 JavaScript 语言?

JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script language),指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本”。

对象

1.4 表达式还是语句?

对象采用大括号表示,这导致了一个问题:如果行首是一个大括号,它到底是表达式还是语句?

{foo:123}

JavaScript 引擎读到上面这行代码,会发现可能有两种含义。第一种可能是,这是一个表达式,表示一个包含foo属性的对象;第二种可能是,这是一个语句,表示一个代码区块,里面有一个标签foo,指向表达式123。

为了避免这种歧义,JavaScript 引擎的做法是,如果遇到这种情况,无法确定是对象还是代码块,一律解释为代码块。

{console.log(123) }// 123

上面的语句是一个代码块,而且只有解释为代码块,才能执行。

如果要解释为对象,最好在大括号前加上圆括号。因为圆括号的里面,只能是表达式,所以确保大括号只能解释为对象。

({foo:123})// 正确
({console.log(123) })// 报错

这种差异在eval语句(作用是对字符串求值)中反映得最明显。

eval('{foo: 123}')// 123eval('({foo: 123})')// {foo: 123}

上面代码中,如果没有圆括号,eval将其理解为一个代码块;加上圆括号以后,就理解成一个对象。

2.5 属性是否醉在:in 运算符

in运算符用于检查对象是否包含某个属性(不是键名),包含返回true,否则返回false。

var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true

in不能识别

2.6 属性的遍历:for...in 循环
  • 它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
  • 它不仅遍历对象自身的属性,还遍历继承的属性。

如果继承的属性是可遍历的,那么就会被for...in循环遍历到。但是,一般情况下,都是只想遍历对象自身的属性,所以使用for...in的时候,应该结合使用hasOwnProperty方法,在循环内部判断一下,某个属性是否为对象自身的属性。

var person = { name: '老张' };

for (var key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key);
  }
}
// name

3.with 语句

with (对象) {
  语句;
}

它的作用是操作同一个对象的多个属性时,提供一些书写的方便。

// 例一
var obj = {
  p1: 1,
  p2: 2,
};
with (obj) {
  p1 = 4;
  p2 = 5;
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;

// 例二
with (document.links[0]){
  console.log(href);
  console.log(title);
  console.log(style);
}
// 等同于
console.log(document.links[0].href);
console.log(document.links[0].title);
console.log(document.links[0].style);

注意,如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量。

var obj = {};
with (obj) {
  p1 = 4;
  p2 = 5;
}

obj.p1 // undefined
p1 // 4

中,对象obj并没有p1属性,对p1赋值等于创造了一个全局变量p1。正确的写法应该是,先定义对象obj的属性p1,然后在with区块内操作它。

这是因为with区块没有改变作用域,它的内部依然是当前作用域。这造成了with语句的一个很大的弊病,就是绑定对象不明确。

with (obj) {
  console.log(x);
}

单纯从上面的代码块,根本无法判断x到底是全局变量,还是对象obj的一个属性。这非常不利于代码的除错和模块化,编译器也无法对这段代码进行优化,只能留到运行时判断,这就拖慢了运行速度。因此,建议不要使用with语句,可以考虑用一个临时变量代替with。

with(obj1.obj2.obj3) {
  console.log(p1 + p2);
}

// 可以写成
var temp = obj1.obj2.obj3;
console.log(temp.p1 + temp.p2);

相关文章

  • 摘要

    每一个孩子都有他自己的一条路,作父母的必须按着每一个孩子当走的路来培养他、来栽培他、来训练他。因此,作父母的必须要...

  • 摘要

    很多时候如实描述真相,根本创作不出感动人心的小说和电影,优秀的艺术作品必定参杂着虚构,但阅读者从作品中得到的...

  • 《摘要》

    1、此生之路,我将走过;走过这一次,便再也无法重来。所有力有能及善行,所有充盈于心的善意,我将毫不吝惜,即刻倾,我...

  • 摘要

    如此遥不可及的梦想,大概很快就会实现了吧,为什么突然放弃了呢?———我总是习惯忘记 我想一个人去伊斯坦布尔看猫咪,...

  • 摘要

    生命,特别是超生命,想要探索所有可能的生物学和所有可能的进化方式。而它利用我们创造它们,因为这是唯一探索它们的途径...

  • 摘要

    我的导师周梵对我们说,治疗师,咨询师与来访者本身就是旅途的伙伴,放下刻板的名令禁止,放下应该与不应该。 不要害怕跟...

  • 摘要

    在家庭里,说不说话不重要,说什么话不重要,重要的是你的语气和表情。 “我错了”不是自责,是承担,是担当,是高境界的...

  • 摘要

    年轻的时候以为不读书不足以了解人生,直到后来才发现如果不了解人生,是读不懂书的。读书的意义大概就是用生活所感去读书...

  • 摘要!

    很多时候,人往往总是会一叶障目,不见泰山,人们往往喜欢从有利于自己的角度甚至是可以狠狠的恶心一下对手让自己爽一把的...

  • 摘要

    我的梦想,无人问津。目前的困境就是,自我和无能。不动情于痛哭流涕,不恼怒于无药可救。当你想要生气,给自己一分钟时间...

网友评论

      本文标题:摘要

      本文链接:https://www.haomeiwen.com/subject/zstdactx.html