本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一.JavaScript
1.JavaScript 可以通过不同的方式来输出数据:
- 使用 window.alert() 弹出警告框。
- 使用 document.write() 方法将内容写到 HTML 文档中。
- 使用 innerHTML 写入到 HTML 元素。
- 使用 console.log() 写入到浏览器的控制台。
2.没有声明就使用的变量,默认为全局变量,不论这个变量在哪被使用。
3.因为遵从“高内聚,低耦合”的编程原则,尽量不要使用html元素中可以添加事件属性的方式来添加属性。
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 x = 5; // 初始化 x
var y = 7; // 初始化 y
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
和
var x = 5; // 初始化 x
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
var y = 7; // 初始化 y
的结果会不相同;下面的代码中的y 输出了 undefined,这是因为变量声明 (var y) 提升了,但是初始化(y = 7) 并不会提升,所以 y 变量是一个未定义的变量。
10.this 的多种指向:
- ** 1、在对象方法中, this 指向调用它所在方法的对象。
- ** 2、单独使用 this,它指向全局(Global)对象。
- ** 3、函数使用中,this 指向函数的所属者。
- ** 4、严格模式下函数是没有绑定到 this 上,这时候 this 是 undefined。
- ** 5、在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素。
- ** 6、apply 和 call 允许切换函数执行的上下文环境(context),即 this 绑定的对象,可以将 this 引用到任何对象。