美文网首页JavaScript前端面试题
Javascript面试应该注意的点

Javascript面试应该注意的点

作者: Aniugel | 来源:发表于2018-11-21 20:54 被阅读1次

NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。

基本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。6类
引用数据类型:对象(Object)、数组(Array)、函数(Function)。3类
注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

JavaScript 变量的生命期从它们被声明的时间开始。

局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。

向未声明的 JavaScript 变量分配值

如果您把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。
这条语句:
carname="Volvo";
将声明 window 的一个属性 carname。

非严格模式下给未声明变量赋值创建的全局变量,是全局对象的可配置属性,可以删除。
var var1 = 1; // 不可配置全局属性
var2 = 2; // 没有使用 var 声明,可配置全局属性
console.log(this.var1); // 1
console.log(window.var1); // 1
delete var1; // false 无法删除
console.log(var1); //1
delete var2;
console.log(delete var2); // true
console.log(var2); // 已经删除 报错变量未定义

如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h1>我的第一个 Web 页面</h1>
<p>我的第一个段落。</p>
<button onclick="myFunction()">点我</button>
<script>
function myFunction()
{
    document.write(Date());
}
</script>
</body>
</html>

在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。
你的全局变量,或者函数,可以覆盖 window 对象的变量或者函数。
局部变量,包括 window 对象可以覆盖全局变量和函数。
在 JavaScript 中, 对象和函数同样也是变量。全局和局部变量即便名称相同,它们也是两个不同的变量。修改其中一个,不会影响另一个的值

事件委托是: 利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!
闭包是什么,有什么特性,对页面有什么影响
闭包就是能够读取其他函数内部变量的函数,使得函数不被GC回收,如果过多使用闭包,容易导致内存泄露
变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。
JavaScript 只有声明的变量会提升,初始化的不会。
JavaScript 严格模式(strict mode)不允许使用未声明的变量。在函数内部声明是局部作用域 (只在函数内使用严格模式):消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
对象也是一个变量。不允许删除变量或对象。不允许删除函数。不允许变量重名:不允许变量重名:不允许使用八进制:不允许使用转义字符:不允许对只读属性赋值:

"use strict";
x = {p1:10, p2:20};      // 报错 (x 未定义)
"use strict";
var x = 3.14;
delete x;  
"use strict";
function x(p1, p2) {}; 
delete x;                // 报错 
"use strict";
function x(p1, p1) {};   // 报错
JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定:
var x = 0.1;
var y = 0.2;
var z = x + y;//0.30000000000000004

在 JavaScript 中,分号是可选的 。由于 return 是一个完整的语句,所以 JavaScript 将关闭 return 语句。| 注意:不用对 return 语句进行断行。 |

function myFunction(a) {
    var
    power = 10;  
    return
    a * power;
}
//两者是一致的
function myFunction(a) {
    var
    power = 10;  
    return;       // 分号结束,返回 undefined
    a * 

在 JavaScript 中, 对象 使用 名字作为索引。如果你使用名字作为索引,当访问数组时,JavaScript 会把数组重新定义为标准对象。执行这样操作后,数组的方法及属性将不能再使用,否则会产生错误:
循环作用域,在第一个实例中,使用了 var 关键字,它声明的变量是全局的,包括循环体内与循环体外。在第二个实例中,使用 let 关键字, 它声明的变量作用域只在循环体内,循环体外的变量不受影响

var i = 5;
for (var i = 0; i < 10; i++) {
    // 一些代码...
}
// 这里输出 i 为 10
let i = 5;
for (let i = 0; i < 10; i++) {
    // 一些代码...
}
// 这里输出 i 为 5

使用 let 关键字声明的全局作用域变量不属于 window 对象:不能使用 window.carName 访问变量。
使用 var 关键字声明的变量在任何地方都可以修改

var x = 2;
// x 为 2
var x = 3;
// 现在 x 为 3

在相同的作用域或块级作用域中,不能使用 let 关键字来重置 var 关键字声明的变量

var x = 2;       // 合法
let x = 3;       // 不合法
{
    var x = 4;   // 合法
    let x = 5   // 不合法
}

const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:
// 错误写法
const PI;
PI = 3.14159265359;
// 正确写法
const PI = 3.14159265359;

const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。下面的代码并不会报错:
// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改属性:
car.color = "red";
// 添加属性
car.owner = "Johnson";
void 该操作符指定要计算一个表达式但是不返回值;可以做死锚点

事件传递有两种方式:冒泡(默认)与捕获。
事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:addEventListener(event, function, useCapture);

<body>
  <div id="div">
    <p id="demo">点击</p>
  </div>
</body>
<script>
  document.getElementById("demo").addEventListener("click", function () {
    alert("oooo", true)
  });
  document.getElementById("div").addEventListener("click", function () {
    alert("9999")
  }, true);
</script>

清除事件监听

<body>
  <div id="div">
    remove
  </div>
  <p id="demo">点击</p>
</body>
<script>
  function demo() {
    console.log("oooooo")
  }
  document.getElementById("demo").addEventListener("click", demo);
  document.getElementById("div").addEventListener("click", function () {
    document.getElementById("demo").removeEventListener("click", demo);
  });
</script>

isNaN( )判断原理:
首先给内部Number( )进行转换,只要Number( )转换出来是数字直接为false,否则为true isNaN(“99999”)=>false ;除以0是无穷大,无穷大是一个数字:

{}是一个不完全空的对象,因为他的原型链上还有Object呢,而null就是完全空的对象,啥也没有,原型链也没有,所以null instanceof Object === false;[]就更不用说了,它的原型链上还比{}多一个Array。
所以,纯粹意义上初始化一个空对象应该用null,{}更像是初始化对象,和new一个没有key的Obejct是一样的。还有就是空数组转换成布尔类型返回的是true:

相关文章

  • Javascript面试应该注意的点

    NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。 基本数据类...

  • 2021前端面试

    174道JavaScript 面试知识点总结(下) [Vue中文社区](javascript:void(0);) ...

  • 求职、简历文章合集

    求职: 面试前应该准备什么? 明天就要面试了,今天我该准备啥? 求职面试应注意哪些礼仪 面试进行时 面试时需要注意...

  • 跳槽面试应该注意的Swift知识点

    1. 给一个数组,要求写一个函数,交换数组中的两个元素 二X程序员: 好简单啊,直接写出以下结果 普通程序员: 首...

  • iOS跳槽面试应该注意的知识点

    1. 给一个数组,要求写一个函数,交换数组中的两个元素 二X程序员:好简单啊,直接写出以下结果 普通程序员:首先跟...

  • Front Interview导航2020-09-07

    JavaScript 【面试】前端JavaScript面试技巧【反向面试】—反问面试官的问题玩转经典十大Top10...

  • 程序员面试+简历宝典

    作为一名程序员,面试时应该注意什么,简历上应该注意哪些问题才能找到自己理想的工作,拿到心仪的工资呢?总之就是面试看...

  • 面试注意点:

    1.屏幕适配——图片放错目录会产生的问题吗?简单说就是高密度(density)的系统去使用低密度目录下的图片资源时...

  • 面试

    JavaScript 面试

  • 去大公司面试要注意的问题!

    请问求职面试要注意哪些问题? 求职者在学习面试礼仪时应该首先了解面试本身的作用、面试的过程,然后准备相应的面试礼仪...

网友评论

    本文标题:Javascript面试应该注意的点

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