草庐IT

前端面试题每日3题——2022-09-04

每日3题16以下代码执行后,控制台中的输出内容为?leta={n:1};letb=a;a.x=a={n:2};console.log(a.x);console.log(b.x);17以下代码执行后,控制台中的输出内容为?leta={};letb="123";letc=123;a[b]="b";a[c]="c";console.log(a[b]);18以下代码执行后,控制台中的输出内容为?functionuser(obj){obj.name="aaa";obj=newObject();obj.name="bbb";}letperson=newObject();user(person);conso

前端面试题每日3题——2022-09-02

每日3题10以下代码执行后,控制台中的输出内容为?varobj={a:1,};((obj)=>{console.log(obj.a);obj.a=3;varobj={a:2,};console.log(obj.a);})(obj);console.log(obj.a);11以下代码执行后,控制台中的输出内容为?functionFun(){}Fun.prototype.a=1;letf1=newFun();Fun.prototype={b:2,c:3,};letf2=newFun();Fun.prototype.d=4;console.log(f1.a);console.log(f1.b);co

【面试题】js 问号(?)的强大之处,你知道吗??

问号(?)的强大之处点击打开视频讲解更加详细一、问号点(?.)obj:{name:"末晨曦吖",},console.log(this.obj.age,"年龄");//undefinedconsole.log(this.obj.hobby,"爱好");//undefinedconsole.log(this.obj.age.data,"年龄");//报错console.log(this.obj.hobby.data,"爱好");//报错我们都知道第二个代码中打印的年龄和爱好是会报错的,因为我们在打印age和hobby时都已经是undefined的了,在undefined中有打印data属性肯定是没

浅拷贝与深拷贝

一、数据类型存储在JavaScript中存在两大数据类型:基本类型、引用类型。基本数据类型存放在栈中,是一段简单的数据段,数据大小确定,内存空间大小可以分配,是直接按值存放的,可以按值访问。引用数据类型存放在堆中,变量在栈中保存的是指向堆内存的地址值,这个地址值指向对应的对象类型,访问堆内存中的对象是通过地址值访问的。二、浅拷贝浅拷贝,指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址。即浅拷贝是拷贝一层。下面简单实现一个浅拷贝:functionshallowClone(obj){ constnewO

浅拷贝与深拷贝

一、数据类型存储在JavaScript中存在两大数据类型:基本类型、引用类型。基本数据类型存放在栈中,是一段简单的数据段,数据大小确定,内存空间大小可以分配,是直接按值存放的,可以按值访问。引用数据类型存放在堆中,变量在栈中保存的是指向堆内存的地址值,这个地址值指向对应的对象类型,访问堆内存中的对象是通过地址值访问的。二、浅拷贝浅拷贝,指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址。即浅拷贝是拷贝一层。下面简单实现一个浅拷贝:functionshallowClone(obj){ constnewO

JavaScript 浅拷贝和深拷贝

JavaScript中对象的赋值是通过将一个对象的引用赋值给另一个变量,两个变量指向同一个内存地址。这意味着如果更改其中一个对象的值,另一个对象的值也会更改。浅拷贝是将一个对象的值复制给另一个对象,但如果对象中包含对其他对象的引用,则这些引用仍然指向原来的对象。可以使用Object.assign()和spreadoperator(扩展运算符...)等方法来实现浅拷贝。深拷贝是完全复制一个对象及其中包含的所有对象。可以使用JSON.parse(JSON.stringify())或lodash.cloneDeep()等方法来实现深拷贝。一、浅拷贝浅拷贝是将一个对象或数组的值复制给另一个对象或数组,

JavaScript 浅拷贝和深拷贝

JavaScript中对象的赋值是通过将一个对象的引用赋值给另一个变量,两个变量指向同一个内存地址。这意味着如果更改其中一个对象的值,另一个对象的值也会更改。浅拷贝是将一个对象的值复制给另一个对象,但如果对象中包含对其他对象的引用,则这些引用仍然指向原来的对象。可以使用Object.assign()和spreadoperator(扩展运算符...)等方法来实现浅拷贝。深拷贝是完全复制一个对象及其中包含的所有对象。可以使用JSON.parse(JSON.stringify())或lodash.cloneDeep()等方法来实现深拷贝。一、浅拷贝浅拷贝是将一个对象或数组的值复制给另一个对象或数组,

LVGL库入门教程03-布局方式

LVGL布局方式LVGL的布局上一节介绍了如何在LVGL中创建控件。如果在创建控件时不给控件安排布局,那么控件默认会被放在父容器的左上角。可以使用lv_obj_set_pos(obj,x,y)调整一个控件的位置(或者使用类似的函数单独调整一个方向的坐标),将它放在相对父容器左上角的合适位置。不过这种布局方式非常死板,因为绝对坐标一旦设定就不能自动调整;而且当控件数量较多时,也很难确定合适的坐标值。上一节介绍过,可以使用lv_obj_align(obj,align,x_ofs,y_ofs)设置一个控件相对父容器的对齐,并用以下图片展示所有的对齐方式:从图片中可以看到,控件之间不仅可以内对齐,也可

LVGL库入门教程02-基本控件与交互

LVGL本质上是一个GUI库,它包含大量的控件(widget),即按钮、标签、滑块、菜单栏这种具有一定人机交互特征的组合图形。LVGL在设计时,采用了一定面向对象编程的设计思路,有效降低了代码编写的难度。LVGL和大多数GUI库的工作方式都是类似的,其代码编写的基础思路为:创建GUI根窗体对象在窗体上绘制各种控件为控件编写响应函数函数在主事件循环中等待用户触发事件响应如果之前有GUI库的使用经验的话,应该可以比较容易明白LVGL代码的编写思路。标签标签(label)应该是GUI最简单也是最基础的控件之一。标签的作用就是显示一小段说明文字。接下来通过介绍标签来介绍LVGL控件的创建、布局与设置属

LVGL库入门教程03-布局方式

LVGL布局方式LVGL的布局上一节介绍了如何在LVGL中创建控件。如果在创建控件时不给控件安排布局,那么控件默认会被放在父容器的左上角。可以使用lv_obj_set_pos(obj,x,y)调整一个控件的位置(或者使用类似的函数单独调整一个方向的坐标),将它放在相对父容器左上角的合适位置。不过这种布局方式非常死板,因为绝对坐标一旦设定就不能自动调整;而且当控件数量较多时,也很难确定合适的坐标值。上一节介绍过,可以使用lv_obj_align(obj,align,x_ofs,y_ofs)设置一个控件相对父容器的对齐,并用以下图片展示所有的对齐方式:从图片中可以看到,控件之间不仅可以内对齐,也可