js 不常用面试题 数组对象深度取值
- function getPersonInfo(one, two, three) {
- console.log(one);
- console.log(two);
- console.log(three);
- }
- const person = "Lydia";
- const age = 21;
- getPersonInfo`${person} is ${age} years old`;
- A: Lydia 21 ["", "is", "years old"]
- B: ["", "is", "years old"] Lydia 21
- C: Lydia ["", "is", "years old"] 21
- 答案 B
- 如果使用标记的模板字符串,则第一个参数的值始终是字符串值的数组。 其余参数获取传递到模板字符串中的表达式的值!
- let a = 3;
- let b = new Number(3);
- let c = 3;
- console.log(a == b);
- console.log(a === b);
- console.log(b === c);
- A: true false true
- B: false false true
- C: true false false
- D: false true true
- 答案: C
- class Chameleon {
- static colorChange(newColor) {
- this.newColor = newColor;
- }
- constructor({ newColor = "green" } = {}) {
- this.newColor = newColor;
- }
- }
- const freddie = new Chameleon({ newColor: "purple" });
- freddie.colorChange("orange");
- A: orange
- B: purple
- C: green
- D: TypeError
- 答案: D
- function Person(firstName, lastName) {
- this.firstName = firstName;
- this.lastName = lastName;
- }
- const lydia = new Person("Lydia", "Hallie");
- const sarah = Person("Sarah", "Smith");
- console.log(lydia);
- console.log(sarah);
- A: Person {firstName: "Lydia", lastName: "Hallie"} and undefined
- B: Person {firstName: "Lydia", lastName: "Hallie"} and Person {firstName: "Sarah", lastName: "Smith"}
- C: Person {firstName: "Lydia", lastName: "Hallie"} and {}
- D:Person {firstName: "Lydia", lastName: "Hallie"} and ReferenceError
- 答案: A
- 对于sarah,我们没有使用new关键字。 使用new时,它指的是我们创建的新空对象。 但是,如果你不添加new它指的是全局对象!
- 我们指定了this.firstName等于'Sarah和this.lastName等于Smith。 我们实际做的是定义global.firstName ='Sarah'和global.lastName ='Smith。 sarah本身的返回值是undefined。
- const obj = { 1: "a", 2: "b", 3: "c" };
- const set = new Set([1, 2, 3, 4, 5]);
- obj.hasOwnProperty("1");
- obj.hasOwnProperty(1);
- set.has("1");
- set.has(1);
- A: false true false true
- B: false true true true
- C: true true false true
- D: true true true true
- 答案: C
- 所有对象键(不包括Symbols)都会被存储为字符串,即使你没有给定字符串类型的键。 这就是为什么obj.hasOwnProperty('1')也返回true。
- 上面的说法不适用于Set。 在我们的Set中没有“1”:set.has('1')返回false。 它有数字类型1,set.has(1)返回true。
- const a = {};
- const b = { key: "b" };
- const c = { key: "c" };
- a[b] = 123;
- a[c] = 456;
- console.log(a[b]);
- A: 123
- B: 456
- C: undefined
- D: ReferenceError
- 答案: B
- 对象键自动转换为字符串。我们试图将一个对象设置为对象a的键,其值为123。
- 但是,当对象自动转换为字符串化时,它变成了[Object object]。 所以我们在这里说的是a["Object object"] = 123。 然后,我们可以尝试再次做同样的事情。 c对象同样会发生隐式类型转换。那么,a["Object object"] = 456。
- 0;
- new Number(0);
- ("");
- (" ");
- new Boolean(false);
- undefined;
- A: 0, '', undefined
- B: 0, new Number(0), '', new Boolean(false), undefined
- C: 0, '', new Boolean(false), undefined
- D: 所有都是假值
- 答案: A
- JavaScript中只有6个假值:
- undefined
- null
- NaN
- 0
- '' (empty string)
- false
- 函数构造函数,如new Number和new Boolean都是真值。
- (() => {
- let x, y;
- try {
- throw new Error();
- } catch (x) {
- (x = 1), (y = 2);
- console.log(x);
- }
- console.log(x);
- console.log(y);
- })();
- A: 1 undefined 2
- B: undefined undefined undefined
- C: 1 1 2
- D: 1 undefined undefined
- 答案: A
- catch块接收参数x。当我们传递参数时,这与变量的x不同。这个变量x是属于catch作用域的。
- 之后,我们将这个块级作用域的变量设置为1,并设置变量y的值。 现在,我们打印块级作用域的变量x,它等于1。
- 在catch块之外,x仍然是undefined,而y是2。 当我们想在catch块之外的console.log(x)时,它返回undefined,而y返回2。
- setInterval(() => console.log("Hi"), 1000);
- A:一个唯一的id
- B:指定的毫秒数
- C:传递的函数
- D:undefined
- 答案: A
- 它返回一个唯一的id。 此id可用于使用clearInterval()函数清除该定时器。
from:https://juejin.im/post/5d0644976fb9a07ed064b0ca
https://juejin.im/post/5bf769e0518825773a2ebfe5#comment
- 实现一个get函数,使得下面的调用可以输出正确的结果
- const obj = { selector: { to: { toutiao: "FE Coder"} }, target: [1, 2, { name: 'byted'}]};
- get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name');
- // [ 'FE Coder', 1, 'byted']
- function get(data, ...args) {
- const res = JSON.stringify(data);
- return args.map((item) => (new Function(`try {return ${res}.${item} } catch(e) {}`))());
- }
- const obj = { selector: { to: { toutiao: "FE Coder"} }, target: [1, 2, { name: 'byted'}]};
- console.log(get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name', 'asd'));
- 有人提到了那种Function的方式没办法处理以下的处理:
- let obj = {time : new Date(), a : "this is a", b : 30};
- 因为JSON.stringfy后,Date、Function和RegExp类型的变量都会失效。对于这种情况,评论区有个大佬(冯恒智)也提到了一种很好的解决方案:
- function get(data, ...args) {
- return args.map((item) => (new Function('data',`try {return data.${item} } catch(e) {}`))(data));
- }
- 1、数组的索引和对象key有什么关系?
- 数组是对象的特殊形式,使用方括号访问数组元素和使用方括号访问对象属性一样。JavaScript将指定的数字索引值转换成字符串——索引1变成"1"——然后将其作为属性名来使用。数组的特别之处在于,当使用小于2^32的非负整数作为属性名时数组会自动维护其length属性。
- // 索引到属性名的转化
- let arr = [1,2,3];
- console.log(arr[1]) //
- console.log(arr["1"]) //
- 所有的数组都是对象,可以为其创建任意名字的属性,不过,只有在小于2^32的非负整数才是索引,数组才会根据需要更新length。事实上数组的索引仅仅是对象属性名的一种特殊类型,这意味着JavaScript数组没有“越界”错误的概念。当查询任何对象中不存在的属性时,不会报错,只会得到undefined
- let arr = [];
- arr["a"] = 1;
- console.log(arr,arr.length) // arr是[a:1] length是0
- 对于使用负数或非整数的情况,数值会转换为字符串,字符串作为属性名来用,当时只能当做常规的对象属性,而非数组的索引。
- let arr = [];
- arr[-1.23] = 0;
- console.log(arr,arr.length) // arr是[-1.23: 0] length是0
- 使用非负整数的字符串或者一个跟整数相等的浮点数时,它就当做数组的索引而非对象属性。
- let arr = [];
- arr["100"] = 'a';
- console.log(arr,arr.length) // arr 是[empty × 100, "a"],length 是101
- let arr1 = [];
- arr1[1.0000] = 'b';
- console.log(arr1,arr1.length) // arr 是[empty, "b"],length 是2
from:https://juejin.im/post/5b684ef9e51d451964629ba1
数组的性能提升:http://www.wemlion.com/post/javascript-array-evolution-performance/
js 不常用面试题 数组对象深度取值的更多相关文章
- js变量作为数组对象的键值方法
js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...
- js 定义像java一样的map方便取值【转】
js 定义像java一样的map方便取值. 百度有位大神说"js对象本身就是一种Map结构",这真是一段让人欢天喜地的代码. <script> //定义一个全局map ...
- ACCESS常用数字类型的说明和取值范围
下面是ACCESS常用数字类型的说明和取值范围列表明供参考 数字类型 范围 Byte(字节) 介于 0 到 255 之间的整型数. Integer ...
- js学习---常用的内置对象(API)小结 :
内置对象(API): 日期 Date: getFullYear() 返回完整的4位的年份 如:2016 getMonth() 返回月份,从0开始 getDate() 返回当前月的第几天,当 ...
- js中常用的内置对象
Arguments 函数参数集合 arguments[ ] 函数参数的数组 Arguments 一个函数的参数和其他属性 Arguments.callee 当前正在运行的函数 Argument ...
- Js数组对象的属性值升序排序,并指定数组中的某个对象移动到数组的最前面
需求整理: 本篇文章主要实现的是将一个数组的中对象的属性值通过升序的方式排序,然后能够让程序可以指定对应的数组对象移动到程序的最前面. 数组如下所示: var arrayData= [{name: & ...
- js valueOf()函数用于返回指定对象的原始值
valueOf()函数用于返回指定对象的原始值. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. 对象 返回 ...
- php 数组定义、取值和遍历
<?php //常用函数 //生成随机数 //echo rand(1,10); //两个参数来确定随机数的范围 //日期时间函数 //var_dump(time()); //取当前时间的UNIX ...
- Jquery常用操作:checkbox、select取值,radio、checkbox、select选中及其相关
常用Jquery操作:checkbox取值.select取值.radio选中.checkbox选中.select选中及其相关: 1.影藏页面元素 使用jquery真的很方便,比如要控制div的显示与隐 ...
随机推荐
- 亮瞎你狗眼的写代码体验狂拽酷炫效果 activate-power-mode
年末了,整理一些收藏的资料,没想到发现一个敲代码的装逼神器; 话不多说上图 我是用idea装的,其他编辑器请自行查找 Preferences -> Plugins -> Install p ...
- 【git】本地git bash连接远程库github
重要参考: https://www.liaoxuefeng.com/wiki/896043488029600 https://segmentfault.com/a/1190000003728094 正 ...
- Spark学习(一)——Spark运行架构
基本概念 在具体讲解Spark运行架构之前,需要先了解几个重要的概念: RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供 ...
- 解决cron不执行的问题
在FreeBSD5.4下面做开发,需要定期备份mysql数据,开始在网上找了bash的脚本,但是执行无效,一怒之下,使用php来写,嘿嘿,其实php写脚本也不错滴.备份其实就是把mysql的数据库文件 ...
- 通过daemon.json配置docker 2375 API端口,配置私有http仓库
编辑daemon.json vi /etc/docker/daemon.json 配置如下内容即可 { "hosts":[ "tcp://0.0.0.0:2375&quo ...
- SHELL中执行Oracle SQL语句查询性能视图
数据库日志是否报错信息 vi check_log.sh #!/bin/bash # Created : 2019.10.10 # Updated : # Author : # Description ...
- IDEA里面maven菜单解读
- Python基本语法_控制流语句_if/while/for
目录 目录 前言 软件环境 If 语句 While循环 break continue for 循环 遍历String 遍历Tuple 遍历List 遍历Dictionary 最后 前言 控制流语句用于 ...
- 52N皇后II
题目:给定一个整数 n,返回 n 皇后不同的解决方案的数量. 来源:https://leetcode-cn.com/problems/n-queens-ii/ 法一: 自己的代码 时间超过百分之90 ...
- mysql 8.0.12 安装配置方法图文教程
一.安装 1.从网上下载MySQL8.0.12版本,下载地址 2. 下载完成后解压 我解压的路径是:D:\Java\mysql-8.0.12-winx64 3. 配置文件 首先在解压的路径下查看是否含 ...