重回Ruby之路 Day2

162 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一.JavaScript

1.JavaScript 可以通过不同的方式来输出数据:

  • 使用 window.alert()  弹出警告框。
  • 使用 document.write()  方法将内容写到 HTML 文档中。
  • 使用 innerHTML 写入到 HTML 元素。
  • 使用 console.log()  写入到浏览器的控制台。

2.没有声明就使用的变量,默认为全局变量,不论这个变量在哪被使用。

3.因为遵从“高内聚,低耦合”的编程原则,尽量不要使用html元素中可以添加事件属性的方式来添加属性。

4.常用的js字符串方法

5.关于for循环以前疏漏的细节:

for in 循环不仅可以遍历对象的属性,还可以遍历数组。for 循环除了使用 in 方式来循环数组,还提供了一个方式: of , 遍历数组时更加方便。

for...of 是 ES6 新引入的特性。它既比传统的for循环简洁,同时弥补了forEach和for-in循环的短板。

for-of的语法:

for (var value of myArray) {
  console.log(value);
}

for-of 的语法看起来跟 for-in 很相似,但它的功能却丰富的多,它能循环很多东西。

定义了数组后对数组进行赋值,中间如有某些下标未被使用(即未被赋值),在遍历的时候,采用一般的 for 循环和 for...in 循环得到的结果不同。

for...in 循环会自动跳过那些没被赋值的元素,而 for 循环则不会,它会显示出 undefined。

6.关于break和continue语句:

continue 语句(带有或不带标签引用)只能用在循环中。

break 语句(不带标签引用),只能用在循环或 switch 中。

通过标签引用,break 语句可用于跳出任何 JavaScript 代码块。

7.关于属性转换:

constructor 属性返回所有 JavaScript 变量的构造函数。

可以使用 constructor 属性来查看对象是否为数组 (包含字符串 "Array"):

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

8.关于js的变量提升问题: js中只有声明的变量会提升,初始化的不会。所以应当在每个作用域开始前声明这些变量。

比如

var x5; // 初始化 x
var y7; // 初始化 y

elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;           // 显示 x 和 y

var x5; // 初始化 x

elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;           // 显示 x 和 y

var y7; // 初始化 y

的结果会不相同;下面的代码中的y 输出了 undefined,这是因为变量声明 (var y) 提升了,但是初始化(y = 7) 并不会提升,所以 y 变量是一个未定义的变量。

9.js验证api的各种方法

10.this 的多种指向:

  • ** 1、在对象方法中, this 指向调用它所在方法的对象。
  • ** 2、单独使用 this,它指向全局(Global)对象。
  • ** 3、函数使用中,this 指向函数的所属者。
  • ** 4、严格模式下函数是没有绑定到 this 上,这时候 this 是 undefined。
  • ** 5、在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素。
  • ** 6、apply 和 call 允许切换函数执行的上下文环境(context),即 this 绑定的对象,可以将 this 引用到任何对象。