首页 > 其他分享 >JS面试

JS面试

时间:2024-03-18 22:11:39浏览次数:17  
标签:console log 对象 Symbol JS 面试 let name

JS面试

数据类型

基本数据类型

boolean
null
undefined
number
string
bigint
symbol
{
	symbol:唯一值,类似数据库中的id永远
	一般用于定义唯一不重复值的字段
	声明Symbol:let id = Symbol(arg)
	arg参数是对该Symbol的描述,用于区分不同的Symbol对象
	Symbol.description 可以调用descripton方法,返回值为该symbol对象的描述
	Symbol.for(arg) 方法也可以生成一个Symbol对象,arg是对他的描述,只要描述一致,就可以创建完全相同的Symbol对象
	let id1 = Symbol("描述")
	let id2 = Symbol("描述")
	console.log(id1===id2)  //输出false
	此时的俩个symbol是不同的
	但是使用Symbol.for()方法,可以获得相同描述的Symbol对象
	let id1 = Symbol.for("描述")
	let id2 = Symbol.for("描述")
	console.log(id1===id2)   输出true
	可以看到是俩个相同的Symbol对象
	Symbol原型.keyFor(Symbol实例),也可以获得Symbol对象的描述,但是只能获得由Symbol.for创建的symbol对象的描述
	例如,console.log(Symbol.keyFor(id1))
	//输出 描述
	Symbol的实际应用场景:{
	1.解决id重复问题
    let person1 = {
    	key: Symbol(),
    	name: "张三"
		}
	let person2 = {
    	key: Symbol(),
    	name: "张三"
		}
	let sa = {
    	[person1.key]: 3000,
    	[person2.key]: 12000
		}
		console.log(sa[person2.key]);  //输出12000
	2.隐藏对象属性
        class Person{
            constructor(name){
                let id = Symbol()
                this.name = name
                this[id] = 666
            }
        }
        p = new Person()
        for(let key in p){
            console.log(key);  //只输出name
        }
        let id = Symbol()
        //隐藏属性使用get方法
        class Person{
            constructor(name){
                this.name = name
                this[id] = 666
            }
            getId(){
                return this[id]
            }
        }
        p = new Person()
        console.log(p.getId());
		//如果在此结果上还想要遍历
        //可以调用getOwnPropertySymbols获得对象上挂载的Symbol对象
        for(const value of Object.getOwnPropertySymbols(p)){
            console.log(value);
        }
		//获取对象上包括Symbol的所有属性,通过Reflect反射获取
        for(const value of Reflect.ownKeys(p)){
            console.log(value)
        }
    }
}

引用数据类型

对象(object)
数组(Array)
函数(Function)
日期(Date表示日期和时间)
正则表达式(RegExp)
Map(键值对集合)
Set(一种不重复值集合)

面试1:判断数据为数组还是对象

使用Object.prototyoe.toString.call()  来判断对象和数组
对于数组返回"[object Array]"
对于对象返回"[object Object]"

let arr = [1,2]
let obj = {}


// 我的判断方法
console.log(arr instanceof Array)
console.log(obj instanceof Array)

//判断方法1
console.log(Object.prototype.toString.call(arr)==="[object Array]");
//true
console.log(Object.prototype.toString.call(obj)==="[object Object]");
//true

//判断方法2
Array.isArray([])   使用Array对象中的isArray判断,返回boolean
//true
Array.isArray({}) 
//false

面试2:null是不是对象类型?

null实际上不是一个对象,他是七大基本类型中的一种

早期的js设计遗留问题,js底层实现中使用了一种称为标签来存储不同类型的值,对于对象类型,其标签值的二进制表示的低三位都是0,null在内存中表示全0,因此低三位为0所以被识别为一个对象

image-20240314100345143

面试3:0.1+0.2等于多少

0.1+0.2=0.3000000004

因为有些小数的二进制是无限循环的01串,所以在运算时会进行舍弃,所以精度会丢失,根据舍入的第一位决定最后一位是否需要进位(取舍规则是取16位,16位中且包括小数点)

image-20240315085014944

标签:console,log,对象,Symbol,JS,面试,let,name
From: https://www.cnblogs.com/wbcde116/p/18081579

相关文章

  • Threejs 车场景案例
    效果如下:本来上传视频的,视频还在审核中,通过之后可以看看各位大佬进来关注下:技术:使用threejs框架体系开发,需要具体的源码关注回复:"车“即可获取下载地址谢谢,不光有这个场景,还有更多的场景在持续免费的更新中,谢谢支持!......
  • 史上最全Java核心面试题(带全部答案)2024年最新版
    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦。在跳槽季来临之前,特地做这个系列的文章,一方面帮助自己巩固下基础,另一方面也希望帮助想要换工......
  • HTML+CSS+JS实现一个图书管理的登录跳转,做的花里胡哨,当娱乐即可。
    目录1、大二上学期的一个小作业2、页面展示3、进入主页可以看到书籍,这个页面是参照某个博主写的,忘记是哪个了,好久了。4、点击右边的搜索框,会跳转到我写的另一个页面,这里面的都是固定的,不是灵活的,因为当时只学了web而已。5、获取源码地址1、大二上学期的一个小作业2、......
  • 亲子游戏【华为OD机试JAVA&Python&C++&JS题解】
    题目描述宝宝和妈妈参加亲子游戏,在一个二维矩阵(NN)的格子地图上,宝宝和妈妈抽签决定各自的位置,地图上每个格子有不同的糖果数量,部分格子有障碍物。游戏规则是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的所有糖果都可以拿走,不能走障碍物的格子,只能上下......
  • JavaScript学习笔记7: 对象 - 自定义对象&JSON
    JS对象-自定义对象&JSON自定义对象类似java的类Json的所有属性(key)需要用双引号包围,本质是字符串<script>    varuser={    name:"tom",    age:10,    gender:"male",    //eat:function(){}    //可以简写为    eat(){//自......
  • JSON在服务器端的使用
    Test1packageatsyc.test;23importatsyc.pojo.Dog;4importatsyc.pojo.Person;5importcom.fasterxml.jackson.core.JsonProcessingException;6importcom.fasterxml.jackson.databind.ObjectMapper;7importorg.junit.Test;89importjava.util.......
  • JavaScript学习笔记1: JS引入方法
    JavaScriptJS的引入方法内部脚本在script标签间插入js语句,可以在任意位置放置任意数量的script,为了改善显示速度,一般把js脚本放在body的底部<!--内部脚本--><script>//警告框alert('HelloJS');</script>外部脚本外部定义的js脚本,在js脚本中......
  • JavaScript学习笔记2: js书写语法及变量
    JS书写语法以及变量变量声明变量<style>vara=20;a="张三";//js是一门弱类型语言,变量可以存放不同类型的值</style>几种不同的变量声明方式varvar定义的是全局变量在代码块中声明的变量,在代码块外也可以访问可以重复定义<style>{v......
  • My97DatePicker日期插件WdatePicker.js的使用方法
    原文链接:https://blog.csdn.net/honghailiang888/article/details/51384929一、先来最简单的配置方法:(1)下载WdatePicker.js(包括lang和skin文件夹)。(2)在html页面中导入WdatePicker.js。//同时引入了WdatePicker.css文件(3)在输入框input元素上加入class="Wdate"onFocus="WdatePic......
  • JSX(JavaScript XML)语法
    1.在script标签中使用JSX语法需要:使用babel在script标签上添加:type="text/babel"2.JSX中的注释使用//、/**/使用{/**/}3.嵌入数据情况一:当变量是Number、String、Array类型时,可以直接显示情况二:当变量是null、undefined、Boolean类型时,内容为空;如果希望可以显示......