深挖 JavaScript 类型判断:你真的懂它吗?

【前端面试】javascript全栈开发——深挖nestJS项目 Nest 内置了 IoC 容器来解析提供者之间的关系,支持使用普通值、类和异步或同步工厂来定义提供者。NestJS 中间件提供了一种强大的机制,可以在处理 HTTP 请求和响应时进行自定义处理。通过方法和,开发者可以灵活地控制中间件的应用范围,包括特定路由、请求方法或控制器。同时,中间件的依赖注入和函数式定义为创建简洁、可重用的中间件提供了便利。全局中间件的设置进一步简化了对所有路由应用通用逻辑的过程。通常不需要编写自定义异常,但如有需要,应创建自定义异常层次结构,让自定义异常继承自基础的类。 阅读详情

1. 揭秘 typeof 操作符

JavaScript 中最简单的类型判断方式是使用 typeof 操作符。你是否熟悉这个工具的背后机制呢?

typeof 的基础知识

在初学者的眼中,typeof 看起来简单直观,能够轻松告诉你一个变量的数据类型。例如:

console.log(typeof 42); // 输出: "number"
console.log(typeof "Hello"); // 输出: "string"
console.log(typeof true); // 输出: "boolean"

typeof 的局限性

然而,typeof 并不是完美无缺的。它在某些情况下可能会让你感到困惑。最为著名的问题就是对 null 的判断:

console.log(typeof null); // 输出: "object"

为什么会出现这样的结果呢?这涉及到 JavaScript 早期版本的一些实现细节。

为什么 typeof null 是 "object"?

在 JavaScript 的最初实现中,JavaScript 的值是由类型标签和值组成的。对于 null 来说,它的类型标签是 0(000),而在 JavaScript 中,对象的类型标签是 1(001)。因此,typeof null 返回 "object",成为 JavaScript 中的一个历史遗留问题。

深入了解 typeof 操作符,有助于你更好地理解 JavaScript 的类型系统,以及为什么在某些情况下它可能表现出乎你的意料。在下一节,我们将继续探讨 instanceof 操作符,看看它在类型判断中的作用和局限性。

2. 探索 instanceof 操作符

在 JavaScript 中,instanceof 操作符是判断对象是否是某个构造函数的实例的工具。让我们一探这个强大而有趣的工具。

instanceof 的基本用法

const arr = [1, 2, 3];
console.log(arr instanceof Array); // 输出: true

const today = new Date();
console.log(today instanceof Date); // 输出: true

instanceof 让你能够轻松检查对象是否是特定构造函数的实例。但你是否了解 instanceof 在处理跨框架对象时的问题?

instanceof 的局限性

// 在跨框架的情况下可能不起作用
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const win = iframe.contentWindow;

const foo = win.Array(1, 2, 3);
console.log(foo instanceof Array); // 输出: false

instanceof 的问题在于它是基于对象原型链的。在跨框架开发时,每个框架有自己的全局环境,导致 instanceof 可能不如预期。因此,在这些情况下,我们需要谨慎使用 instanceof。

深入了解 instanceof 操作符,能够让你更好地理解对象之间的关系,但它并非是完美无缺的。在下一节,我们将研究更为可靠的 Object.prototype.toString 方法,它为我们提供了更准确的对象类型信息。

3. 解码 Object.prototype.toString 方法

在 JavaScript 中,Object.prototype.toString 方法是一种强大而灵活的方式,用于获取对象的准确类型信息。让我们一同解码这个方法,揭示它的奥秘。

Object.prototype.toString 的基本用法

const number = 42;
console.log(Object.prototype.toString.call(number)); // 输出: "[object Number]"

const str = "Hello, World!";
console.log(Object.prototype.toString.call(str)); // 输出: "[object String]"

const arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr)); // 输出: "[object Array]"

通过调用 Object.prototype.toString 并传入要检查的对象,我们得到了一个以 [object 类型] 格式表示的字符串,其中 "类型" 是对象的实际类型。这是一个更为可靠的方式,相比于之前我们提到的 typeof 和 instanceof。

Object.prototype.toString 的原理

该方法的原理在于,它返回的字符串是由对象的内部 [[Class]] 属性决定的。[[Class]] 是一个内部属性,描述了对象的类型。

const customObj = {
    get [Symbol.toStringTag]() {
        return 'CustomObject';
    }
};

console.log(customObj[Symbol.toStringTag]); // 输出: "CustomObject"
console.log(Object.prototype.toString.call(customObj)); // 输出: "[object CustomObject]"

通过重写对象的 Symbol.toStringTag 属性,我们可以自定义 Object.prototype.toString 的输出结果,使其更符合我们的需求。

4. 看透 Array.isArray 方法

在 JavaScript 中,Array.isArray 方法是专门用于判断对象是否为数组的工具。它的设计目的是为了解决在其他方式中可能遇到的问题。现在,我们一起深入了解这个方法。

Array.isArray 的基本用法

const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // 输出: true

const str = "Hello, World!";
console.log(Array.isArray(str)); // 输出: false

Array.isArray 方法返回一个布尔值,如果对象是数组,则为 true,否则为 false。这使得它成为判断对象是否为数组的更可靠的选择。

Array.isArray 的优势

Array.isArray 的优势在于解决了其他方法可能遇到的一些问题。特别是在处理跨框架对象时,Array.isArray 不受框架环境影响,始终能够正确地判断对象是否为数组。

const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const win = iframe.contentWindow;

const foo = win.Array(1, 2, 3);
console.log(Array.isArray(foo)); // 输出: true

即使在跨框架的情况下,Array.isArray 依然稳健地判断对象是否为数组。

5. 挑战与解决方案

在 JavaScript 类型判断的旅程中,我们不可避免地会遇到一些挑战。这一节将探讨一些常见问题,并为你提供一些解决方案和最佳实践。

1.处理 NaN 和 Infinity

console.log(Object.prototype.toString.call(NaN)); // 输出: "[object Number]"
console.log(Object.prototype.toString.call(Infinity)); // 输出: "[object Number]"

Object.prototype.toString 无法区分 NaN 和 Infinity,这可能导致在类型判断时的混淆。为了解决这个问题,我们可以使用 Number.isNaN 和 isFinite 方法。

javascriptCopy code
console.log(Number.isNaN(NaN)); // 输出: true
console.log(isFinite(Infinity)); // 输出: false

2.处理特殊对象类型

const customObj = {
    get [Symbol.toStringTag]() {
        return 'SpecialObject';
    }
};

console.log(Object.prototype.toString.call(customObj)); // 输出: "[object SpecialObject]"

对于自定义对象类型,重写 Symbol.toStringTag 属性可以改变 Object.prototype.toString 的输出结果。在进行类型判断时,我们需要注意可能的自定义情况。

3.在跨框架环境中的问题

const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const win = iframe.contentWindow;

const foo = win.Array(1, 2, 3);
console.log(Array.isArray(foo)); // 输出: false

Array.isArray 在处理跨框架对象时可能会出现问题。为了解决这个问题,我们可以使用 Array.isArray 的更安全版本。

const safeIsArray = function(obj) {
    return Array.isArray(obj) || Object.prototype.toString.call(obj) === '[object Array]';
};

console.log(safeIsArray(foo)); // 输出: true

6. 你对 JavaScript 类型判断的掌握程度如何?

在我们的类型判断之旅中,你已经接触了 JavaScript 中一系列有趣而重要的概念。现在,让我们来测试一下你对这些知识点的掌握程度。

1.什么是 typeof 操作符?它的优缺点是什么?

你是否能简洁地解释 typeof 操作符的作用,并提到它在判断某些类型时的局限性?

2.instanceof 操作符的作用是什么?它在跨框架开发中可能遇到的问题是什么?

你对 instanceof 操作符的了解是否能涵盖它在判断对象类型时的主要作用以及可能的问题?

3.Object.prototype.toString 方法的原理是什么?如何利用它进行类型判断?

你能否简单概括 Object.prototype.toString 方法的原理,并演示如何使用它进行准确的类型判断?

4.Array.isArray 方法的优势在哪里?它是如何解决跨框架问题的?

你是否理解 Array.isArray 方法相对于其他方法的优势,并知道它是如何在跨框架开发中保持稳健性的?

5.在 JavaScript 类型判断中,处理 NaN、Infinity 和特殊对象类型的常见方法有哪些?

你是否能列举出处理 NaN、Infinity 和特殊对象类型时的一些常见方法和最佳实践?

6.针对跨框架环境中可能出现的问题,你有什么解决方案?

对于可能在跨框架环境中遇到的问题,你是否有一些建议和解决方案,例如在 Array.isArray 的基础上实现一个更安全的版本?

7.在类型判断中,什么时候应该使用 Number.isNaN 和 isFinite?

你是否理解 Number.isNaN 和 isFinite 在处理 NaN、Infinity 时的优势,并能够在合适的情况下使用它们?

这个小测验将帮助你巩固你在这篇博客中所学到的知识。如果你能自信地回答这些问题,那么恭喜你,你对 JavaScript 类型判断有着很好的掌握程度!如果还有疑惑,不妨回顾一下前面的内容,深入理解这些概念。在学习的道路上,不断巩固是提高技能水平的关键。

结论

在实际开发中,根据具体情况选择合适的类型判断方法至关重要。综合运用这些方法,可以更准确、健壮地处理各种数据类型。希望这篇博客为你打下坚实的类型判断基础,让你在 JavaScript 的世界中更加自信地航行。不断继续学习和实践,你将更深入地理解和运用这些知识。祝愿你在 JavaScript 的学习之旅中取得更大的进步!

渗透测试通杀漏洞挖掘:从自动化工作流到手动深挖的实战指南 漏洞挖掘是网络安全领域的核心实践,其本质在于系统化地识别和利用软件或系统中的安全缺陷。其基本原理是通过信息收集、攻击面分析、漏洞验证和成果反馈的循环工作流,将渗透测试从依赖个人经验的‘艺术’转变为可重复、可扩展的‘工程’。这一过程的技术价值在于显著提升安全测试的效率和覆盖面,能够批量化地发现跨平台、跨应用的潜在风险。在实际应用场景中,无论是针对企业资产、SRC(安全应急响应中心)目标,还是CTF靶场环境,构建标准化的漏洞挖掘流程都至关重要。本文聚焦于实现‘通杀’能力的核心路径,深入探讨如何集成如Nuclei 阅读详情

相关推荐

射频测试基础知识总结

表示可以辐射到空间的电磁频率,频率范围从300KHz~110GHz之间,射频简称RF,是高频交流变化电磁波的简称,其每秒变化小于1000次被称为低频电流,超过10000次的称为高频电流,而射频就是这种高频电流。为了确保天线接收的信号能够在接收机的最后一级被正确的恢复,一个好的低噪音放大器需要在放大信号的同时产生尽可能低的噪音以及失真。两种,带内试验的范围也有一定的差别,比如,带内试验主要是检测信号的质量,如功率、频谱宽度、调制质量,而带外测试的是信号的杂散、谐波,主要是看对频带之外的干扰有多大。

cny70的博客 9628

js 数据类型_面试中你真的能完美回答js数据类型吗

请说一下js有哪些数据类型?这是一道非常常见的面试题,但事实上可以区分出面试官和候选人的水平。你可能会回答基础数据类型是string、boolean、number、null、undefined,引用类型是object。有些同学还回答不全,赶紧检讨一下。水平差点的面试官或者要求低点的面试管这里可能就结束了。下一题。想刁难你一下的面试官就开始了。es6的Symbol知不知道,你如果说知道,他...

weixin_40003451的博客 103

常微分方程 (ODE) 和 随机微分方程 (SDE)

常微分方程(Ordinary Differential Equations, ODE)和随机微分方程(Stochastic Differential Equations, SDE)是数学中描述系统动态行为的重要工具。它们有一些相似之处,但在处理随机性方面存在显著差异。

weixin_39699362的博客 4384

深挖js中instanceof 和 typeof 的实现原理

文章目录ES内置数据类型typeof用法注意点原理一些例子自己实现一个?instanceof用法是否在原型链上继承中判断实例是否属于它的父类或属于它的祖先类原理自己实现一个?总结参考资料 ES内置数据类型 在es6标准中的JS 中,有七种内置类型 七种内置类型又分为两大类型:基本类型和对象(Object)。 基本类型有六种: null,undefined,boolean,number,string,symbol。 一些值得注意的坑 JS 的数字类型是浮点类型的,没有整型。并且浮点类

SCUhzs 1529

一文读懂GPU通信互联技术:GPUDirect、NVLink与RDMA

GPUDirect是NVIDIA开发的一项技术,旨在实现GPU与其他设备(如网络接口卡NIC和存储设备)之间的直接通信和数据传输,而无需CPU的参与。传统上,数据在GPU和另一个设备之间传输时,必须通过CPU,这导致潜在的性能瓶颈和延迟增加。GPUDirect技术则通过绕过CPU,直接访问和传输数据,显著提高系统性能。NVLink是NVIDIA开发的一种高速、高带宽的互连技术,用于连接多个GPU之间或GPU与其他设备(如CPU、内存等)之间的通信。

异构算力老群群(在读985计算机博士生)的技术博客 7773

多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码

本文将为大家介绍基于BP、ELM、LSTM、BiLSTM和SAELSTM多种算法的数据预测,并提供相应的Matlab源码。SAELSTM算法是一种结合自动编码器和LSTM神经网络的深度学习方法,用于时间序列数据预测。ELM算法是一种单层前向神经网络,在单次训练过程中直接产生输出权重,从而具有快速学习和良好推广性能。多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码。总体来看,采用多种算法进行数据预测可以提高预测准确率,并可根据不同场景选择适合的算法。

qq_39605374的博客 861

2024年Web前端JavaScript面试题整理附答案,面试前端开发自我介绍

(1)两等号判等,会在比较时进行类型转换;(2)三等号判等(判断严格),比较时不进行隐式类型转换,(类 型不同则会返回false);(3)Object.is 在三等号判等的基础上特别处理了NaN、-0和+0,保证-0和+0不再相同,但Object.is(NaN, NaN)会返回true。Object.is应被认为有其特殊的用途,而不能用它认为它比其它的相等对比更宽松或严格。面试题2:common.js和es6中模块引入的区别?答案:CommonJS是一种模块规范, 最初被应用于Nodejs, 成为Nodej

2401_84103844的博客 959

【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦

好了,关于 【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。1、手动下载对应版本到 pyenv-win\install_cache 目录(如上手动操作安装步骤,文件名需匹配,如 python-3.10.0-amd64.exe)。该指令会列出,pyenv包管理工具所支持的所有python版本,

Spring Boot-Common On With You 852

数据类型考题深挖

js的常见数据类型分为基础类型 boolean null undefined number string symbol 引用类型 obj 显示类型转换:Number String Boolean 函数 Number进行显示类型转换 1)数值=》数值 2)字符串分三种情况:1、‘123’=》123 2、‘abc’/‘abc123’=》nan 3、’’=>0 3) 布尔值 true=》...

shixueyan_fendou的博客 131

13. MIC配置

恒玄BES2700,支持3个MIC。

雪飞_海 925

爆肝整理:微信公众号文章HTML编写完整规范,运营必备手册

微信公众号文章排版总是出错?📱 这份完整的HTML编写规范文档帮你彻底解决!文档包含所有支持的标签、CSS属性、实用代码模板和注意事项 📋,让你快速掌握微信文章的HTML编写技巧,告别第三方编辑器依赖 ✅

XiaoqiangClub的博客 2305

深挖JS语法第一集

从今天开始用重新认识JS,毕竟前端是靠JS吃饭的,开始深挖一下细节,在这个过程中也反思了一下,为啥java没学好。果然是基础不牢,地动山摇啊,古人诚不欺我也! JS的数据类型有哪几种? 以前一直说会JS,却连这个问题没好好搞过,给自己两耳光…… 数据类型 名称 1. 基本数据类型(也叫简单数据类型) number string boolean symbol undefined n...

weixin_34112030的博客 135

SAP Fiori 个性化数据持久化实战:从 Personalizer 到 Variant 的完整设计思路

摘要:SAPUI5的Personalization服务用于持久化用户界面交互偏好(如表格列顺序、筛选条件),而非业务数据。它提供两种模式:Direct Mode适合单一实体存储,Container Mode支持多实体和变体管理。开发时需注意数据存储位置差异(本地调试用local storage,生产环境由前端服务器处理),避免与业务数据或Bookmark服务混淆。典型应用场景包括表格布局保存和查询方案管理,需根据需求选择模式。该服务能有效提升Fiori应用的用户体验连续性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 130

js三目运算符判断_javascript中的或运算(||)与三目运算(?:)

在编程世界里,非常基础且重要的一种运算是逻辑运算,也就是通过判断条件来进行的运算。在很多代码中,我们会经常看到一种奇怪的赋值方法:var a = a || {};这是什么意思?其实很简单,它等价于:var a = a ? a : {};但是为了深挖,我们来对这种方法进行详细的讲解,从而方便你在今后的编程中更好的使用这种方法。或运算的解释或运算有多种理解方式,其中一种:如果||左侧表达式的值为真值,...

weixin_28877505的博客 2086

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JavaScript Challenges Book入门:如何通过30+挑战提升你的JavaScript技能

JavaScript Challenges Book是一本专注于帮助开发者掌握JavaScript中最晦涩和棘手部分的实践指南。通过30多个精心设计的挑战,你将深入理解JavaScript的核心概念和高级特性,显著提升编程技能。无论你是初学者还是有经验的开发者,这些挑战都能帮助你发现知识盲点,巩固基础,并掌握实用的JavaScript技巧。 [![JavaScript Challenges Bo

gitblog_00980的博客 1065

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

会JS了不起啊?Sorry会JS真的了不起

黑马程序员视频库播妞QQ号:3077485083传智播客旗下互联网资讯、学习资源免费分享平台相信每一个学习前端的人对于前端三剑客html+css+js都不会陌生,这可以说是每一个前端的标...

传智播客的专栏 366

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JavaScript学习笔记:2.基础语法与数据类型

上一篇笔记我们聊了JavaScript的入门常识,这一篇就来深挖它的"内功心法"——基础语法与数据类型。作为一门让无数开发者又爱又恨的语言,JS的基础看似简单,实则藏着不少"陷阱"和"彩蛋"。今天就用接地气的方式,带你吃透这些核心知识点,从此写代码少踩坑、多优雅~

Amon的专栏 1095

前端面试全攻略:核心考点+手写代码+项目深挖

前端面试备战指南:核心知识与实战技巧 本文系统梳理前端面试必备知识点,涵盖基础理论、框架原理、手写代码和项目经验,帮助应聘者高效准备。 知识体系 HTML/CSS核心:盒模型、Flex/Grid布局、BFC机制、响应式设计原理 JavaScript深度:作用域链、原型继承、EventLoop、ES6+特性 框架对比: React:Fiber架构、Hooks原理、性能优化 Vue:响应式系统、Diff算法、Composition API 实战重点 高频手写题:防抖节流、Promise.all、new操作符实现

警警的博客 2723

js数据类型详细归纳

起因  基于自己个人对于js的不太熟练的的原因,重新学习了js,在js数据类型这里,因此想深挖一下,一门语言的深度,是无论学多少遍都不会到底的,所以只能不断的总结和归纳. JS数据类型:基础概念 首先明确一下观点 JS的数据类型有8种。 在ES5的时候,我们认知的基础数据类型确实是 5种。:Number、String、Boolean、undefined、Null。 外加1种。复杂数据类型:object。 但随着学习时间和学习深度的增加 了解到ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即

weixin_45846980的博客 164

01-如何用 AI 高效学习 JavaScript

把 AI 当作一位 24 小时在线的私人导师,而不是一个可以复制粘贴答案的搜索引擎。掌握正确的使用方法,你的学习效率会提升数倍。

以梦想为帆,行动作桨,驶向辉煌彼岸。 595

js可能会被面试官深挖的知识点

事件模型 1. 原始事件模型(DOM0级) 这是一种被所有浏览器都支持的事件模型,对于原始事件而言,没有事件流,事件一旦发生马上处理。有两种方式可以实现原始事件: html代码中直接指定属性值:<button id="demo" type="button" onclick="doSomeTing()" /> 在js中获取代码元素指定:document.getElementsById("demo").onclick = doSomeTing() 优点:所有浏览器都兼容。 缺点: 只能绑定

Spring_lmu的博客 488

腾讯前端实习面试全解析:项目深挖与算法实战

前端开发作为现代Web应用的核心技术栈,其知识体系涵盖HTML/CSS基础、框架原理及工程化实践。以React为代表的虚拟DOM技术通过diff算法优化渲染性能,结合Fiber架构实现并发渲染,这正是大厂面试常考的技术原理。在实际工程中,权限控制采用RBAC模型实现动态路由,性能优化运用虚拟滚动提升长列表体验,这些方案都体现了前端工程化的技术价值。本文通过腾讯云前端实习面试的真实案例,详细拆解了项目深挖、框架原理、算法编码等考察维度,特别对React Hooks执行时机、二叉树路径总和等高频考点进行了技术解

weixin_30691871的博客 362

深挖JS语法第二集

JS一定要抠细节,逻辑性。我们这次探讨 内存 的问题、一个IE的BUG以及深拷贝和浅拷贝,和typeof运算符的小技巧 在第一集里面知道了7个基本的数据类型 number string boolean symbol null underdefined object 那么这七个数据类型如何转换呢 其他数据类型转string String()函数 String(0) "0" String(tr...

weixin_34309435的博客 138

JS判断两个对象内容是否相等的方法示例及开发面试题汇总(图)

JS判断两个对象内容是否相等的方法示例及开发面试题汇总(图): 这篇文章主要介绍了JS判断两个对象内容是否相等的方法,结合具体实例形式分析了javascript针对字符串、数组及对象的相关判断技巧,需要的朋友可以参考下 本文实例讲述了JS判断两个对象内容是否相等的方法。分享给大家供大家参考,具体如下: 我们知道,如果两个对象即使内容,JavaScript也会判断它们不相等。但是有时候,我们仅仅需要...

minemi的博客 3558

前端面试最新风向:不问八股,只有无尽的场景题、原理与项目深挖

马上踏入26年,目前前端面试整体流程都在表明,前端岗位需要有经验,有能力解决问题的求职者,即使没有经验,也要在面试中表达出对工作难点的思维解决。就现在而言,一些对原理,对项目中难点没有足够的经验累积的前端,在面试中的表达反而很致命,即使经验低对应面试难度也不会很高。因为本身在前端开发这行也算摸打滚爬了几年,身边或者亲戚里面有些想要从事前端行业的,就会给我打电话寻求帮助,但其实我能帮助的也就是提供一些面试中被问到概率比较大的方面,参考下简历,以及项目上面的帮助,主要还是需要靠自己努力。

WYiQIU的博客 1075

web前端高级JavaScript - 深挖call方法的底层实现原理并封装自己的call方法

深挖call的底层实现原理 在js中有3个方法可以改变函数中this的指向,那就是call、apply和bind。关于三个方法的更多详细请参考web前端高级 - JavaScript中函数内的this指向。这里只讲一下call的底层实现原理。下面来我们来看一段代码: let obj = { name:'Alvin' } let name = 'window' function fn(){ console.log(this.name); } fn();//window fn.call(obj);//

lixiaosenlin的专栏 6036
上一篇: 最近,前端岗位爆了。。。
下一篇: 你是否好奇,前端专家的简历怎么写?
Cipher_Y
博客等级 码龄3年 93粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值