数据类型判断+数据深度拷贝+this指向

JS前端面试题 顺序:从最底层一直往上:div----->body----->html----->document事件可以理解为:1,操作触发,比如按下开机键电脑就开机了;2,状态的变化,比如天黑了就要急着回家。浏览网页时常见时间触发行为有:鼠标点击,鼠标滚轮滚动,表单提交等。 阅读详情
const father = {
  age: 56,
  name: ['老邓头', '臭屁爹', '老顽童'],
  eat: function() {
    console.log('==00老邓头我喜欢喝点小酒', this.age)
  },
  children: {
    age: 28,
    name: ['小邓子', '小顽童'],
    eat: function() {
      console.log('小邓我喜欢喝汤')
    },
    grandson: {
      age: 2,
      name: ['全局团宠'],
      eat: function() {
        console.log('座为团宠我喜欢喝粥')
      }
    }
  }
}

// 基本数据类型直接拷贝,引用数据类型直接赋值只是引用了原数据的路径

const obj1 = JSON.parse(JSON.stringify(father))

// JSON深度复制,如果有属性是function,该属性不被复制,其他属性正常深度复制===》可用于没有使用fn的对象进行深度拷贝

const obj2 = Object.assign(father)// 没使用{}合并成新对象,这样合并father===obj2

const obj3 = Object.assign({}, father)// 这样复制到一个空{},可以实现第一层深度复制

// Object.assign只能深度拷贝对象上第一层属性,对象里面的对象是浅拷贝===》可用于只有一层对象的拷贝

// 可用递归方式实现深度赋值:Object.prototype.toString.call(arr)

// for in =》对于对象来说,prop是key;对于数组,prop是索引

function deepClone(origin, target) {
  target = target || {}
  const toStr = Object.prototype.toString
  for (const prop in origin) {
    if (origin.hasOwnProperty(prop)) { // ===> hasOwnProperty是为了判断属性直接是在对象上,而不是在原型上, 因为说不定这个对象有原型
      if (typeof origin[prop] === 'object' && origin[prop] !== null) {
        if (toStr.call(origin[prop]) === '[object Object]') {
          target[prop] = {}
        } else {
          target[prop] = []
        }
        deepClone(origin[prop], target[prop])
      } else {
        target[prop] = origin[prop]// ==>赋值
      }
    }
  }
  return target
}

/* 《检测数据类型》

1、typeof:可以判断基本数据类型(只能判断基本类型,fn特殊判断是fn,null判断是obj)

2、instanceof :运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上:

object instanceof constructor ====》[] instanceof Array === true =>true / [] instanceof Array === Object =>false

3、constructor是通过与构造函数对比判断数据类型(除了null和undefined,其他属性类型都能判断)

》undefined 和 null 没有 constructor 属性,所有不能用其判断

》object.constructor === 构造函数 ===》eg:father.constructor===Array =>true / father.constructor===Object =>false

4、toString():是 Object 的原型方法,它能够返回当前对象的字符串表示;

可以通过 toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为 thisArg。

*(固定)instanceof不能判断基本数据类型;typeof不能判断引用数据类型;

(所有数据类型)constructor都能判断;toString能检测所有数据类型

 

hasOwnProperty:

》》注意:const object1 = new Object();object1.property1 = 42;console.log(object1.hasOwnProperty('property1'));

hasOwnProperty是为了判断属性直接是在对象上,而不是在原型上, 因为说不定这个对象有原型


《this指向》

call/apply都是改变this指向,任何方法都可以.call

function test() { console.log('11我是谁') }

test() === test.call() === test.apply()

 

function Father(name, age, sex) { // 行参

console.log(this, '===我是this')

// 相当于有个隐形的this={}对象,执行完return this对象出去

this.name = name,

this.age = age,

this.sex = sex

}

Father()// 这里打印出来的this指向是window

const obj = {}

Father.call(obj)// this指向obj

Father.call(obj, '我是name', '我是age', '我是sex')// 实参


 

【Web前端面试】葵花宝典(2022版本)——JS篇(下) 你还在担心面试不过嘛?面试题找不到,小编特意整理了30+道高频前端面试题,送给大家,希望大家都能顺利通过面试,拿下高薪,也可持续关注本面试题专栏。本篇文章主要写的是面试题中的JS篇(下),之后会更新前端其他方面相关面试题。.................. 阅读详情

相关推荐

浅谈angular.copy() 深拷贝

本篇文章主要介绍了浅谈angular.copy() 深拷贝,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

在angular中深拷贝两种方法

2.在angular中引用lodash包。在ts组件中引入loadash包。

Tonghanhan的博客 794

从Transformer到Mamba:显著性检测领域的计算效率革命(Samba框架深度解析)

本文深入解析了Samba框架在显著性目标检测(Salient Object Detection)领域的创新应用,通过结合Mamba架构的优势,实现了计算效率的革命性提升。Samba框架采用显著性引导的Mamba模块(SGMB)和上下文感知上采样(CAU),有效解决了传统CNN和Transformer的局限性,同时在RGB-D等多模态任务中展现出卓越性能。

mmm90的博客 557

日常总结 之 angular copy 深拷贝

angular提供了一个可以复制对象的api——copy(source,destination),它会对source对象执行深拷贝。 angular的操作实质是对dom的model进行操作,几乎所有的渲染都应放在model层。 Name: E-mail: Gender: male female RESET

evilemon的博客 6515

ArcGIS License Server点击启动没反应,许可管理器无法启动怎么办

4 当我们再打开ArcGIS License Server Administrator的时候。3 在【服务】中找到【ArcGIS License Manager】双击。无法启动ArcGIS License Server的情况。在使用ArcGIS的过程中,我们经常会遇到。专注GIS领域知识分享,交流行业软件技巧。欢迎关注,不定期分享GIS各种问题和技巧。1 右击我的电脑——【管理】服务状态——启动,确定即可。启动类型选择——自动。

GIS蒲公英的博客 2万+

MATPOWER下载安装教程

将MATPOWER文件复制在C:\Program Files (x86)\MATLAB\R2016b\bin目录下。原来的窗口中多了很多文件路径,点击【保存】,再点击【关闭】选择所要添加的MATPOWER文件夹,点击【选择文件夹】二、将MATPOWER放在bin目录下。找到菜单栏的【设置路径】点击【添加并包含子文件】一、从官网下载后解压。

weixin_47365903的博客 2万+

angular 对象深层复制

在angular中对象用“=”赋值,不管赋值还是被赋值的对象中一个改变,另外一个也会随之改变,这是因为他们指向的是同一内存地址。为了解决这个问题,我们可以用‘lodash’深层复制。 第一: npm install lodash 第二:在tsconfig上面的"compilerOptions":{ 加入"types": [“lodash”], } 第三在调用的component中引入:import...

qq_43205711的博客 1403

GEO数据库数据下载方法总结

#GEO数据下载 GEO是生信分析经常用到的数据库。经常需要从中获取表达矩阵,平台信息,meta信息等,本博文总结了几种下载GEO数据的方法,各有优劣,实际应用过程中自行选择适合自己的。 ##方法一:直接从浏览器中下载 以数据集GSE1001为例, 可以直接点击“Series Matrix Files”获取该样本txt格式的表达谱数据,一般我们认为这种处理过的表达谱数据是没有问题的,当然,具体情况具体分析。 打开下载的文件可以看到许多“#”开头的行,这些是注释信息,一般关注这些注释信息中的“data pr

sakoko_的博客 4万+

angular.copy() 深拷贝

因为项目中需要拷贝,查阅angularjs API文档,发现对angular.copy() 的解释: 复制一个对象或者一个数组(好吧,万物皆对象,数组也是一个对象)。 1> 如果省略了destination,一个新的对象或数组将会被创建出来; 2> 如果提供了destination,则source对象中的所有元素和属性都会被复制到destination中; 3> 如果sour

爱吃菠萝蜜的小透明的博客 2万+

ardupilot BMI088加速度陀螺仪学习

本节主要记录ardupilot 中BMI088传感器的学习过程,欢迎批评指正。BMI088是一款高性能6轴惯性传感器,由16位数字三轴±24g加速度计和16位数字三轴±2000°/ s陀螺仪组成。 BMI088允许高精度测量方向和沿三个正交轴的运动检测。BMI088具有高振动鲁棒性和3 x 4.5 x0.95mm³的小尺寸,是用于无人机和机器人应用等恶劣环境的高性能IMU中的独特产品。 BMI088专门设计用于有效抑制由于PCB上的共振或整个系统的结构而可能发生的振动。 除了高振动稳定性外,BMI088的出

陌城烟雨 2054

Unity中的Timeline

Timeline与动画系统类似,但是它可以针对多个物体做出一系列多个动画,它可以创建多个轨道,对象激活与隐藏轨道,动画轨道,声音轨道等。每个轨道都可以单独编辑,轨道内的不同资源可以排列并且融合

L的博客 1万+

angular html判断类型,Angular - - Angular数据类型判断

angular.isArray判断括号内的值是否为数组。格式:angular.isArray(value);value: 被判断是否为数组的值。---------------------------------------------------------------angular.isDate判断括号内的值是否是一个时间。格式:angular.isDate(value);value:被判断是否...

weixin_28990495的博客 765

RSA算法详解:万字文章详解RSA的加密与解密

为了彻彻底底的研究明白RSA算法,真的是。。煞(lei)费(si)苦(wo)心(le),首先我希望自己前前后后、彻彻底底的琢磨明白,其次我也希望我把他分享出来以后,大家都能读得懂,这篇文章真的是我迄今为止写的又臭又长的一篇文章了,但是我能保证的是,你读完了以后,绝对不会再问RSA是啥玩意儿了。。

布啦啦 7668

JavaScript进阶:深浅拷贝、异常处理与this指向全解析

在JavaScript开发中,内存管理和错误处理是构建健壮应用的基础。通过堆栈内存模型理解基本类型与引用类型的存储差异,是掌握深浅拷贝原理的关键。深拷贝技术如JSON序列化和递归实现能有效避免对象引用带来的副作用,在状态管理和性能优化中具有重要价值。异常处理机制通过try-catch和Promise.catch等方案,保障了前端应用的稳定性,结合错误监控可实现生产环境的问题追踪。this绑定规则及其在React等框架中的应用,则是保证代码行为符合预期的核心知识。这些进阶概念在电商系统、数据看板等复杂场景中尤

weixin_34246826的博客 273

从零开始学习PX4源码9(部署px4源码到gitee)

由于PX4-Autopilot托管在github,在没有翻墙的情况下,下载固件无法下载。为了提高下载速度,这里将PX4在github上的仓库以及其子仓库(依赖仓库)都搬移到gitee上了。本教程讲解如何快速部署px4固件到gitee上,实现不需要翻墙快速本地就可以下载PX4固件。暂时没有找到如何批量直接通过修改.gitmodules后,使用什么命令可以直接把所有的一级二级子模块的指向直接正常映射。!!

陌城烟雨 810

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

赋值和拷贝

一、问题描述 // 示例 import React from "react"; import ReactDOM from "react-dom"; import _ from "lodash"; class App extends React.Component { constructor(props) { super(props); this.st...

weixin_30265103的博客 136

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深夜爆肝JS好文!2021字节跳动春招面试题深度讲解

剑指offer —— 2021字节跳动春招面试题详解(JS篇)1. 深拷贝与浅拷贝5. 如何用CSS绘制如下三角形?6. BFC规范是什么?7. 怎么让Chrome支持小于12px 的文字?8. css 加载会造成阻塞吗?9. 1像素边框问题如何解决?10. CSS优化、提高性能的方法有哪些? 本文选题都是字节跳动中一些 经典且有一定难度的JS面试题 含金量杠杠的!,并且会进行深入的讲解,专业讲解分析,包教包会 1. 深拷贝与浅拷贝 1.1 深拷贝与浅拷贝有什么区别? 深拷贝和浅拷贝只针对象:

欧阳的技术博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++之浅拷贝、深拷贝、拷贝构造函数、拷贝赋值运算符、自定义的深拷贝函数应用总结(二百二十九)

本篇目的:理解C++之拷贝类对象到this指针应用。浅拷贝(Shallow Copy):浅拷贝是指简单地复制对象的成员变量的值。在浅拷贝中,只复制指针或基本数据类型的值,而不会创建新的动态内存或复制指针所指向的数据。这导致多个对象共享相同的内存,可能引发潜在的问题,例如内存释放或修改数据时的冲突。深拷贝(Deep Copy):深拷贝是指复制整个对象及其动态分配的内存。在深拷贝中,会创建一个新的对象,并为新对象的成员变量分配独立的内存,以复制原始对象的数据。

Android系统攻城狮 380

深拷贝与浅拷贝的区别和理解

深拷贝和浅拷贝区别使用浅拷使用循环遍历赋值sliceconcat深拷使用总结 一般拷贝的使用场景主要是,将对象或者数组赋值到新的变量中。但是这样就会出现一个问题,当改变新的对象或数组时,源数组或对象也会发生改变,那么这个时候要根据实际情况使用深度拷贝,还是浅拷贝,这里不能一股脑的使用深度拷贝,毕竟深度拷贝对于性能的消耗还是蛮大的 区别 浅拷贝: 将原对象或者原数组直接赋给新的变量,这里赋值的对...

Dream 540

深拷贝和浅拷贝

浅拷贝:只复制对象本身,不复制对象中的引用类型字段所指向的对象。因此,浅拷贝后的两个对象会共享一些内部状态。深拷贝:不仅复制对象本身,还复制对象中的引用类型字段所指向的对象。因此,深拷贝后的两个对象是完全独立的。

夏壹分享 700

C++面向对象编程核心:类与this指针的深度解析与实践指南

面向对象编程(OOP)是一种将数据和操作封装为对象的编程范式,其核心在于通过类(Class)定义对象的蓝图,实现数据抽象和封装。在C++中,类将成员变量(属性)和成员函数(方法)绑定,通过访问控制(如private、public)保护数据安全。this指针作为每个非静态成员函数的隐式参数,指向调用该函数的对象实例,是连接方法与具体对象的关键桥梁,解决了成员命名冲突并支持链式调用。理解类和this指针对于构建模块化、可维护的软件至关重要,尤其在开发学生管理系统、游戏引擎或图形界面等复杂应用时,能有效组织代码结

weixin_30627341的博客 310

Java中的clone() 深拷贝 浅拷贝

上图展示了浅拷贝:对于非基本数据类型,clone过后,结果两个指针指向了同一块儿内存空间,所以仅仅是浅拷贝,这样的话如果对一个对象进行操作,另一个内容也会变,这显然是不合理的,应该每个对象分别保存自己的数据。 所以我们要进行深拷贝! 浅拷贝和深拷贝例子: import java.util.Vector; public class Student implements Cloneable{

Xiaowo 3193

JavaScript面试基础知识点梳理

本文梳理了JavaScript面试中的核心知识点,包括:1.变量类型(基本/引用类型,类型判断方法,深浅拷贝实现);2.作用域与闭包(执行上下文、作用域链、闭包原理及应用);3.异步机制(EventLoop、微任务/宏任务执行顺序);4.原型链与继承(原型机制、多种继承实现);5.DOM/BOM操作(事件模型、事件代理、跨域解决方案);6.模块化规范。重点解析了this指向、内存存储、异步执行等高频考点,并提供了典型代码示例,帮助理解JavaScript的核心概念和面试要点。

油墨香^-^的博客 403

原型模式深度解析:从浅拷贝到深拷贝,掌握对象复制的核心技术

在面向对象编程中,对象创建是一个基础且关键的操作。当对象结构复杂或初始化成本高昂时,直接通过构造函数实例化会带来性能瓶颈和代码冗余。原型模式(Prototype Pattern)提供了一种优雅的解决方案,其核心原理是通过复制现有实例来创建新对象,而非重新执行耗时的初始化流程。这一模式在提升系统性能、降低资源消耗方面具有重要技术价值,尤其适用于需要快速生成大量相似对象的场景,如游戏开发中的怪物生成、图形系统中的粒子复制等。理解并正确实现原型模式的关键在于区分浅拷贝与深拷贝:浅拷贝仅复制对象本身及基本类型字段,

weixin_34212762的博客 538

this,笔面试真题

1. 分析:javascript中的六种数据类型:object(function,array,null),string,number,boolean,undefined,function。 var f = ( function f (){ return "1"; }, function g (){ return 1; } )(

m0_46201220的博客 182

Vue项目里利用JS深拷贝(函数,Date,RegExp,Map,Set)重新初始化data的数据

前言 最近遇到一个需求,keep-alive 缓存 list 组件,从 detail 组建返回 list 组件,list 组件不刷新,从别的组件跳到 list 组件,list 组件数据初始化(从而实现 list 组件的刷新)。这里如何实现组件数据重新初始化呢?我想到的是利用 JS 深拷贝去实现。 数据深拷贝 判断数据类型 // 检查属性类型 checkType (any) { return Object.prototype.toString.call(any).slice(8, -1) },

m0_46627730的博客 795
上一篇: 简单登录注册例子实现redux功能
下一篇: [mobx.array] Attempt to read an array index (2) that is out of bounds (1). Please
Anguler_
博客等级 码龄10年 20粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值