14万字 | 400多道JavaScript 面试题及详细答案09(建议收藏)

简介: 14万字 | 400多道JavaScript 面试题及详细答案09(建议收藏)

193.赋值方法有哪些应用?


下面是 Object.assign() 方法的一些主要应用,


它用于克隆对象。

它用于合并具有相同属性的对象。


194.什么是Proxy(代理)对象?


Proxy 对象用于定义基本操作的自定义行为,例如属性查找、赋值、枚举、函数调用等。语法如下:


var p = new Proxy(target, handler);

1

让我们以代理对象为例,


var handler = {
     get: function(obj, prop) {
         return prop in obj ?
             obj[prop] :
             100;
     }
 };
 var p = new Proxy({}, handler);
 p.a = 10;
 p.b = null;
 console.log(p.a, p.b); // 10, null
 console.log('c' in p, p.c); // false, 100


在上面的代码中,它使用get处理程序定义代理在其上执行操作时的行为



195.seal 方法的目的是什么?


所述Object.seal()方法被用于密封一个对象,通过防止从被添加到它的新属性和标记所有现有的性质不可配置的。但是当前属性的值仍然可以更改,只要它们是可写的。让我们看下面的例子来了解更多关于 Seal() 方法的信息


const object = {
     property: 'Welcome JS world'
  };
  Object.seal(object);
  object.property = 'Welcome to object world';
  console.log(Object.isSealed(object)); // true
  delete object.property; // You cannot delete when sealed
  console.log(object.property); //Welcome to object world



196.seal 方法的应用有哪些?


下面是 Object.seal() 方法的主要应用,


它用于密封对象和数组。

它用于使对象不可变。


197.freeze 和 seal 方法有什么区别?


如果使用 Object.freeze() 方法冻结对象,则其属性将变为不可变且无法对其进行更改,而如果使用 Object.seal() 方法密封对象,则可以在现有属性中进行更改的对象。



198.如何判断物体是否 seal?


Object.isSealed() 方法用于确定对象是否已密封。如果以下所有条件都成立,则对象被密封


1.如果不能扩展。

2.如果它的所有属性都是不可配置的。

3.如果它不可移动(但不一定不可写)。让我们在行动中看到它


const object = {
 property: 'Hello, Good morning'
 };
 Object.seal(object); // 使用 Seal() 方法密封对象
 console.log(Object.isSealed(object));      // 检查对象是否密封



199.如何获得可枚举的键值对?


Object.entries() 方法用于返回给定对象自己的可枚举字符串键控属性 [key, value] 对的数组,其顺序与 for…in 循环提供的顺序相同。让我们在一个例子中看看 object.entries() 方法的功能,


const object = {
   a: 'Good morning',
   b: 100
 };
 for (let [key, value] of Object.entries(object)) {
   console.log(`${key}: ${value}`); // a: 'Good morning'
                                    // b: 100
 }


注意:顺序不保证为对象定义。



200.Object.values 和 Object.entries 方法的主要区别是什么?


Object.values() 方法的行为类似于 Object.entries() 方法,但它返回一个值数组而不是 [key,value] 对。
  const object = {
    a: 'Good morning',
    b: 100
  };
  for (let value of Object.values(object)) {
    console.log(`${value}`); // 'Good morning'
                                 100
  }



201.如何获取任何对象的键列表?


您可以使用Object.keys()用于返回给定对象自己的属性名称的数组的方法,其顺序与我们使用普通循环获得的顺序相同。例如,您可以获取用户对象的键,


const user = {

  name: 'Haiyong',

  gender: 'male',

  age: 40

};


console.log(Object.keys(user)); //['name', 'gender', 'age']



202.你如何用 prototype 创建一个对象?


Object.create() 方法用于创建具有指定原型对象和属性的新对象。即,它使用现有对象作为新创建对象的原型。它返回一个具有指定原型对象和属性的新对象。


const user = {
    name: 'Haiyong',
    printInfo: function () {
      console.log(`My name is ${this.name}.`);
    }
  };
  const admin = Object.create(user);
  admin.name = "Nick"; //请记住,"name"是在"admin"而非"user"对象上设置的属性
  admin.printInfo(); // My name is Nick


203.什么是WeakSet?


WeakSet 用于存储弱(弱引用)持有对象的集合。语法如下,


new WeakSet([iterable]);

1

让我们看下面的例子来解释它的行为,


var ws = new WeakSet();
 var user = {};
 ws.add(user);
 ws.has(user);    // true
 ws.delete(user); // 从集合中删除user
 ws.has(user);    // false, user 已被删除



204.WeakSet 和 Set 有什么区别?


主要区别在于 Set 中对象的引用是强引用,而 WeakSet 中对象的引用是弱引用。即,如果没有其他引用 WeakSet 中的对象可以被垃圾回收。


其他区别是,


1.Sets 可以存储任何值而 WeakSets 只能存储对象的集合

2.WeakSet 没有与 Set 不同的 size 属性

3.WeakSet 没有 clear、keys、values、entries、forEach 等方法。

4.WeakSet 不可迭代。



205.列出 WeakSet 上可用的方法集合?


下面是 WeakSet 上可用的方法列表,


1.add(value):将给定值附加到弱集的新对象

2.delete(value):从 WeakSet 集合中删除值。

3.has(value):如果 WeakSet 集合中存在该值,则返回 true,否则返回 false。

4.length():它返回weakSetObject的长度让我们在一个例子中看看上述所有方法的功能,


var weakSetObject = new WeakSet();
 var firstObject = {};
 var secondObject = {};
 // add(value)
 weakSetObject.add(firstObject);
 weakSetObject.add(secondObject);
 console.log(weakSetObject.has(firstObject)); //true
 console.log(weakSetObject.length()); //2
 weakSetObject.delete(secondObject);



206.什么是 WeakMap?


WeakMap 对象是键/值对的集合,其中的键被弱引用。在这种情况下,键必须是对象,值可以是任意值。语法如下所示,


new WeakMap([iterable])


让我们看下面的例子来解释它的行为,


var ws = new WeakMap();
  var user = {};
  ws.set(user);
  ws.has(user);    // true
  ws.delete(user); // 从 map 中删除用户
  ws.has(user);    // false, user 已被删除


207.WeakMap 和 Map 有什么区别?


主要区别在于 Map 中关键对象的引用是强引用,而 WeakMap 中关键对象的引用是弱引用。即,如果没有其他引用 WeakMap 中的键对象可以被垃圾收集。


其他区别是,


1.Maps 可以存储任何类型的键,而 WeakMaps 只能存储键对象的集合

2.与 Map 不同,WeakMap 没有 size 属性

3.WeakMap 没有 clear、keys、values、entries、forEach 等方法。

4.WeakMap 不可迭代。



208.列出 WeakMap 上可用的方法集合?


下面是 WeakMap 上可用的方法列表,


1.set(key, value):设置 WeakMap 对象中键的值。返回 WeakMap 对象。

2.delete(key):删除与键关联的任何值。

3.has(key):返回一个布尔值,断言一个值是否与 WeakMap 对象中的键相关联。

4.get(key):返回与键关联的值,如果没有则返回 undefined。让我们在一个例子中看看上述所有方法的功能,


var weakMapObject = new WeakMap();
 var firstObject = {};
 var secondObject = {};
 // set(key, value)
 weakMapObject.set(firstObject, 'Haiyong');
 weakMapObject.set(secondObject, 100);
 console.log(weakMapObject.has(firstObject)); //true
 console.log(weakMapObject.get(firstObject)); // Haiyong
 weakMapObject.delete(secondObject);



209.uneval 的目的是什么?


uneval() 是一个内置函数,用于创建对象源代码的字符串表示。它是一个顶级函数,不与任何对象相关联。让我们看下面的例子来了解更多关于它的功能,


var a = 1;

uneval(a); // 返回一个包含 1 的字符串

uneval(function user() {}); // returns "(function user(){})"



210.你如何 encode (编码)一个 URL?


encodeURI() 函数用于对除 (, / ? : @ & = + $ #) 字符外具有特殊字符的完整 URI 进行编码。


var uri = 'https://mozilla.org/?x=шеллы';

var encoded = encodeURI(uri);

console.log(encoded); // https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B


211.你如何 decode (解码)一个 URL?


decodeURI() 函数用于解码之前由 encodeURI() 创建的统一资源标识符 (URI)。
  var uri = 'https://mozilla.org/?x=шеллы';
  var encoded = encodeURI(uri);
  console.log(encoded); // https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B
 try {
   console.log(decodeURI(encoded)); // "https://mozilla.org/?x=шеллы"
 } catch(e) { // 捕获格式错误的 URI
   console.error(e);
 }



212.你如何打印网页的内容?


window 对象提供了一个 print() 方法,用于打印当前窗口的内容。它会打开一个打印对话框,让您在各种打印选项之间进行选择。让我们在一个例子中看看print方法的用法,


<input type="button" value="Print" onclick="window.print()" />


注意:在大多数浏览器中,它会在打印对话框打开时被阻止。




213.uneval 和 eval 有什么区别?


该uneval函数返回给定对象的来源;而该eval函数则相反,通过评估不同内存区域中的源代码。让我们看一个例子来澄清差异,


var msg = uneval(function greeting() { return 'Hello, Good morning'; });
 var greeting = eval(msg);
 greeting(); // returns "Hello, Good morning"


214.什么是 anonymous (匿名)函数?


匿名函数就是没有名字的函数!匿名函数通常分配给变量名称或用作回调函数。语法如下,


function (optionalParameters) {
   //do something
 }
 const myFunction = function(){ //分配给变量的匿名函数
   //do something
 };
 [1, 2, 3].map(function(element){ //匿名函数用作回调函数
   //do something
 });


让我们在一个例子中看看上面的匿名函数,


var x = function (a, b) {return a * b};
 var z = x(5, 10);
 console.log(z); // 50



215.局部变量和全局变量的优先顺序是什么?


局部变量优先于同名的全局变量。让我们在一个例子中看看这种行为。


var msg = "Good morning";
 function greeting() {
    msg = "Good Evening";
    console.log(msg);
 }
 greeting();


216.什么是 javascript 访问器?


ECMAScript 5 通过 getter 和 setter 引入了 javascript 对象访问器或计算属性。Getters 使用get关键字,而 Setters 使用set关键字。


var user = {
   firstName: "Hai",
   lastName : "Yong",
   language : "cn",
   get lang() {
     return this.language;
   }
   set lang(lang) {
   this.language = lang;
   }
 };
 console.log(user.lang); // getter 访问 lang as cn
 user.lang = 'en';
 console.log(user.lang); // setter 用于将 lang 设置为 en



217.你如何在对象构造函数上定义属性?


Object.defineProperty() 静态方法用于直接在对象上定义新属性,或修改对象上现有的属性,并返回该对象。让我们看一个例子来了解如何定义属性,


const newObject = {};
 Object.defineProperty(newObject, 'newProperty', {
   value: 100,
   writable: false
 });
 console.log(newObject.newProperty); // 100
 newObject.newProperty = 200; // 由于可写设置,它在严格模式下抛出错误


目录
相关文章
|
3月前
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
63 3
|
3月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
4月前
|
JavaScript 前端开发
常见的JS面试题
【8月更文挑战第5天】 常见的JS面试题
62 3
|
1月前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
35 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
2月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
4月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
45 0
|
4月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
4月前
|
存储 JavaScript 前端开发
JS浅拷贝及面试时手写源码
JS浅拷贝及面试时手写源码
|
4月前
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
|
5月前
|
缓存 JavaScript 前端开发
js高频面试题,整理好咯
中级前端面试题,不低于12k,整理的是js较高频知识点,可能不够完善,大家有兴趣可以留言补充,我会逐步完善,若发现哪里有错,还请多多斧正。