JavaScript常用工具类整理(总结版)(1)

return false;

return true;

} else {

return false;

}

}

20.ASCII转HEX

function (str) {

if (!this.isvalue(str)) {

return “”;

}

var hex = “”;

for (var i = 0; i < str.length; ++i) {

hex += str.charCodeAt(i).toString(16);

}

return hex;

}

21.HEX转ASCII

function (hex) {

if (!this.isvalue(hex) || hex.length % 2 != 0) {

return “”;

}

var str = “”;

for (var i = 0; i < hex.length / 2; ++i) {

var tmp = “0x” + hex[i * 2] + hex[i * 2 + 1];

var charValue = String.fromCharCode(Number(tmp));

str += charValue;

}

return str;

}

22.金额自动加","分割(v_money 要格式化的金额,need_dot 是否需要精确到小数点后2位,{String} 格式化以后的金额,如:1,234,567.08)

function (v_money, need_dot) {

try {

var p_number = parseFloat(v_money);

if(isNaN(p_number)) {

return v_money;

}

var p_string = “” + p_number;

var p_idx = p_string.lastIndexOf(“.”);

if (p_idx < 0) {

p_idx = p_string.length;

p_string = p_string + “.00”;

} else {

var sarray = p_string.split(‘.’);

if (sarray[1] == ‘’) {

p_string = p_string + “00”;

} else if (sarray[1].length == 1) {

p_string = p_string + “0”;

}

}

var p_ret = p_string.substring(p_idx);

var p_temp = p_string.substring(0, p_idx);

var p_length = p_temp.length;

var p_count = Math.ceil(p_length / 3);

for (var p_i = 0; p_i < p_count; p_i++) {

var p_start_i = p_length - (p_i + 1) * 3;

p_ret = p_temp.substring(p_start_i, p_start_i + 3) + p_ret;

if (p_i < p_count - 1) {

p_ret = “,” + p_ret;

}

}

if (need_dot == false) {

var len = p_ret.indexOf(“.”);

p_ret = p_ret.substring(0, len);

}

return p_ret;

} catch (p_ee) {

return “”;

}

};

23.把金额数字转换为中文大写金额

function (n) {

var fraction = [‘角’, ‘分’];

var digit = [‘零’, ‘壹’, ‘贰’, ‘叁’, ‘肆’, ‘伍’, ‘陆’, ‘柒’, ‘捌’, ‘玖’];

var unit = [

[‘元’, ‘万’, ‘亿’],

[‘’, ‘拾’, ‘佰’, ‘仟’]

];

var head = n < 0 ? ‘欠’ : ‘’;

n = Math.abs(n);

var s = ‘’;

for (let i = 0; i < fraction.length; i++) {

s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ‘’);

}

s = s || ‘整’;

n = Math.floor(n);

for (let i = 0; i < unit[0].length && n > 0; i++) {

var p = ‘’;

for (var j = 0; j < unit[1].length && n > 0; j++) {

p = digit[n % 10] + unit[1][j] + p;

n = Math.floor(n / 10);

}

s = p.replace(/(零.)*零KaTeX parse error: Expected group after '^' at position 17: …, '').replace(/^̲/, ‘零’) + unit[0][i] + s;

}

return head + s.replace(/(零.)*零元/, ‘元’).replace(/(零.)+/g, ‘零’).replace(/^整$/, ‘零元整’);

};

24.生成验证码(len 验证码长度(默认:6),{String} 生成的验证码,)

function (len) {

var charactors = “1234567890”;

var value = ‘’;

if (!this.isint(len)) {

len = 6;

}

for (let j = 1; j <= len; j++) {

var i = parseInt(10 * Math.random());

value = value + charactors.charAt(i);

}

return value;

};

25.格式化账号显示(4位加空格)

function (account) {

if (!this.isvalue(account)) {

return “”;

}

if(account.startsWith(“1”)){

if(account.length >= 17){

account=account.substring(0,6)+“******”+account.substring(account.length-5);

}

}

if(account.startsWith(“6”)){

if(account.length >= 16){

account=account.substring(0,4)+" **** **** "+account.substring(account.length-4);

}

}

return account;

};

26.格式化户名显示,2字屏蔽第1位,用*号代替,3字屏蔽第2位,用*号代替,3字以上,显示第1位和最后1位,其余用*号代替,最多使用5位*。

function (name) {

if (!this.isvalue(name)) {

return “”;

}

var res = “”;

if (name.length == 1) {

res += name;

}

if (name.length == 2) {

res += “*”;

res += name.substring(name.length - 1);

}

if (name.length == 3) {

res += name.substring(0, 1);

res += “*”;

res += name.substring(2);

}

if (name.length > 3) {

res += name.substring(0, 1);

for(let i=0; i<name.length - 2; i++) {

if(i <= 4) {

res += “*”;

} else {

break;

}

}

res += name.substring(name.length - 1, name.length);

}

return res;

};

27.字符串替换

function (sourceString, startPos, encryptCount, encryptChar) {

if (typeof sourceString != ‘string’)

return sourceString;

if (sourceString.length <= 0)

return sourceString;

if (typeof startPos != ‘number’)

return sourceString;

if (startPos <= 0)

return sourceString;

if (typeof encryptCount != ‘number’)

return sourceString;

if (encryptCount <= 0)

return sourceString;

if (startPos > sourceString.length)

return sourceString;

if ((startPos + encryptCount) > sourceString.length + 1)

return sourceString;

var str1 = sourceString.substr(0, startPos - 1);

var str2 = sourceString.substr(startPos - 1, sourceString.length - startPos + 1);

var str3 = ‘’;

var str4 = str2.substr(encryptCount, str2.length - encryptCount);

for (var i = 0; i < encryptCount; i++) {

str3 = str3 + encryptChar;

}

return str1 + str3 + str4;

};

28.生成UUID(len UUID长度,默认标准36位,radix UUID基数,默认16)

function (len, radix) {

var chars = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz’.split(‘’);

var uuid = [],

i;

radix = radix || chars.length;

if (len) {

// Compact form

for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];

} else {

// rfc4122, version 4 form

var r;

// rfc4122 requires these characters

uuid[8] = uuid[13] = uuid[18] = uuid[23] = ‘-’;

uuid[14] = ‘4’;

// Fill in random data. At i==19 set the high bits of clock sequence as

// per rfc4122, sec. 4.1.5

for (i = 0; i < 36; i++) {

if (!uuid[i]) {

r = 0 | Math.random() * 16;

uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];

}

}

}

return uuid.join(‘’);

};

29.随机数生成36位UUID

function () {

var s4 = function () {

return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);

}

return s4() + s4() + ‘-’ + s4() + ‘-’ + s4() + ‘-’ + s4() + ‘-’ + s4() + s4() + s4();

};

30.解析json,结果返回

function (str) {

if (typeof str == ‘string’) {

try {

var obj = JSON.parse(str);

if (typeof obj == ‘object’ && obj) {

return obj;

} else {

return false;

}

} catch (e) {

return false;

}

} else if (typeof str == ‘object’) {

console.log(‘It is a object already!’);

return str;

}

console.log(‘It is not a string!’)

};

31.金额数据分转元

function (money) {

if (typeof money == ‘string’) {

money = money.split(“.”).join(“”);//去调小数点

var money2 = parseInt(money);

money2 = money2.toString();

if (money2.length > 2) {

money2 = money2.substring(0, money2.length - 2) + “.” + money2.substring(money2.length - 2, money2.length);

} else if (money2 == 0) {

money2 = “0.00”;

} else if (money2.length == 2) {

money2 = “0.” + money2;

} else if (money2.length == 1) {

money2 = “0.0” + money2;

}

return money2;

}

console.log(‘It is not a string!’)

};

32.金额数据元转分

function (money) {

if (typeof money == ‘string’) {

var money2 = money.replaceAll(“,”, “”);

if (money2.indexOf(“.”) < 0) {

money2 = money2 + “00”

} else if (money2.length - money2.indexOf(“.”) == 2) {//一位小数

money2 = money2.replace(“.”, “”) + ‘0’;

} else {//两位小数

money2 = money2.replace(“.”, “”);

}

return money2;

}

console.log(‘It is not a string!’)

};

33.两个浮点型相减,不丢失精度

function (arg1, arg2) {

var r1, r2, m, n;

try {

r1 = arg1.toString().split(“.”)[1].length

} catch (error) {

r1 = 0

}

try {

r2 = arg2.toString().split(“.”)[1].length

} catch (error) {

r2 = 0

}

m = Math.pow(10, Math.max(r1, r2));

n = (r1 >= r2) ? r1 : r2;

return ((arg1 * m - arg2 * m) / m).toFixed(n);

};

34. 两个浮点型相加,不丢失精度

function (arg1, arg2) {

var r1, r2, m, n;

try {

r1 = arg1.toString().split(“.”)[1].length

} catch (error) {

r1 = 0

}

try {

r2 = arg2.toString().split(“.”)[1].length

} catch (error) {

r2 = 0

}

m = Math.pow(10, Math.max(r1, r2));

n = (r1 >= r2) ? r1 : r2;

return ((arg1 * m + arg2 * m) / m).toFixed(n);

};

35.按长度数组截取字符串,返回按长度分割成的字符串数组

function (str, lens) {

var arr = [];

var len = lens.length;

for (var i = 0; i < len; i++) {

if (str.length >= lens[i]) {

var strCut = str.substring(0, lens[i]);

arr.push(strCut);

str = str.substring(lens[i]);

} else {

// str = str;

arr.push(str);

}

}

return arr;

};

36.按多长间隔截取字符串,n为长度,返回按长度分割成的字符串数组

function (n) {

var str = this;

var arr = [];

var len = Math.ceil(str.length / n);

for (var i = 0; i < len; i++) {

if (str.length >= n) {

var strCut = str.substring(0, n);

arr.push(strCut);

str = str.substring(n);

} else {

// str = str;

arr.push(str);

}

}

return arr;

};

37.格式化字符串

function (fmtStr, obj) {

if (!fmtStr.formatStr) {

String.prototype.formatStr = function (argsObj) {

var regexp = /{(\d+)}/g;

var args = argsObj || [];

var result = this.replace(regexp, function (m, i, o, n) {

// console.log(o + n)

return args[i];

});

return result.replace(‘%’, “'”);

};

}

return fmtStr.formatStr(obj);

};

38.存期格式化

function (trm) {

var trmStr = ‘’;

console.log(“trm==” + trm);

var trms = trm.split(‘D’);

if (trms.length == 2 && trms[0].indexOf(‘M’) != -1) {

var mon = trms[0].substring(1, trms[0].length);

console.log(“mon==” + mon);

var month = parseInt(mon);

if (month < 12) {

if (month != 0) {

trmStr += month + “个月”;

}

} else {

if (month % 12 == 0) {

trmStr += parseInt(month / 12) + “年”;

} else {

trmStr += parseInt(month / 12) + “年” + parseInt(month % 12) + “个月”;

}

}

if (parseInt(trms[1]) > 0) {

if (trmStr) {

trmStr += “零”;

}

trmStr += parseInt(trms[1]) + “天”;

}

}

return trmStr;

};

39.计算总页数,根据总条数和每页显示数(totalpage:总条数,pagesize:每页显示条数)

function (totalcount, pagesize) {

var p = (parseInt(totalcount) + parseInt(pagesize) - 1) / parseInt(pagesize);

return parseInt§;

};

40.将‘YYYYMMDD’格式的字符串格式化成‘YYYY-MM-DD’的格式

function (dateStr) {

var date = dateStr;

if (date.length == 8) {

date = date.substring(0, 4) + “-” + date.substring(4, 6) + “-” + date.substring(6, 8);

}

return date;

};

41.理财,将币种(数字)转为汉字

function (ccycd) {

var ccycdstr = “”;

switch (ccycd) {

case “156”:

ccycdstr = “人民币元”;

break;

case “250”:

ccycdstr = “法国法郎”;

break;

case “246”:

ccycdstr = “马克”;

break;

case “344”:

ccycdstr = “香港元”;

break;

case “392”:

ccycdstr = “日元”;

break;

case “826”:

ccycdstr = “英镑”;

break;

case “840”:

ccycdstr = “美元”;

break;

case “978”:

ccycdstr = “欧元”;

break;

default:

// ccycdstr = “”;

break;

}

return ccycdstr;

}

42.H5获取自己本地IP地址

function grabLocalIps(onNewIP) { // onNewIp - your listener function for new IPs

var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome

var pc = new myPeerConnection({

iceServers: []

}), // 空的ICE服务器(STUN或者TURN)

noop = function () { },

localIPs = {}, //记录有没有被调用到onNewIP这个listener上

ipRegex = /([0-9]{1,3}(.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g;

function ipIterate(ip) {

if (!localIPs[ip]) onNewIP(ip);

localIPs[ip] = true;

}

pc.createDataChannel(“”); //create a bogus data channel

var handle = function (sdp) {

sdp.sdp.split(‘\n’).forEach(function (line) {

if (line.indexOf(‘candidate’) < 0) return;

line.match(ipRegex).forEach(ipIterate);

});

pc.setLocalDescription(sdp, noop, noop);

}

// “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36”

if (navigator.userAgent.match(/^volcano.*/) ||

navigator.userAgent.match(/Chrome/\d*./) && navigator.userAgent.match(/Chrome/\d*./)[0] <= ‘Chrome/50.’) {

pc.createOffer(handle);

} else {

pc.createOffer().then(handle); // create offer and set local description

}

pc.onicecandidate = function (ice) { //listen for candidate events

if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;

ice.candidate.candidate.match(ipRegex).forEach(ipIterate);

};

}

43.通过http请求获取文本数据

function (url, sendData) {

let promise = new Promise((resolve, reject) => {

try {

let response = “”;

let xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function () {

if (xmlhttp.status == 200 || xmlhttp.status == 0) {

response = xmlhttp.responseText;

if (‘’ !== response) {

resolve({ status: xmlhttp.status, response });

}

} else if (xmlhttp.status == 400) {

console.warn(“Bad Request(parameter is not json format)”);

reject({ status: xmlhttp.status, response });

} else if (xmlhttp.status == 500) {

console.warn(“Bad Request(parameter is not json array)”);

reject({ status: xmlhttp.status, response });

} else {

reject({ status: xmlhttp.status, response });

}

}

xmlhttp.open(“GET”, url, true);

xmlhttp.setRequestHeader(“Content-type”, “application/x-www-form-urlencoded”);

xmlhttp.send(sendData);

} catch (e) {

reject(e)

}

})

return promise

}

44.数组转对象

function (list, key) {

var object = {};

if (!list) {

return object;

}

for (var elemInx in list) {

var elem = list[elemInx];

if (!elem[key]) {

return null;

}

object[elem[key]] = elem;

}

return object;

}

45.精准乘法

function (arg1, arg2) {

let m = 0,

s1 = arg1.toString(),

s2 = arg2.toString();

try {

m += s1.split(“.”)[1].length;

} catch (e) {

console.error(“accMul.s1.split:”, e);

}

try {

m += s2.split(“.”)[1].length;

} catch (e) {

console.error(“accMul.s2.split:”, e);

}

return (

(Number(s1.replace(“.”, “”)) * Number(s2.replace(“.”, “”))) /

Math.pow(10, m)

);

}

46.判断当前浏览器环境

function ($) {

if ($ == “ie”) {

if (navigator.appName.indexOf(“Microsoft”) != -1)

return true

}

else if ($ == “ns”)

if (navigator.appName.indexOf(“Netscape”) != -1)

return true;

return false

};

47. 播放语音(src 语音文件url)

function (src) {

let _ = window.document.getElementById(“sound”);

try {

if (this.env(“ie”)) {

if (_ == null) {

let bgSoundObj = window.document.createElement(“bgsound”)

bgSoundObj.id = “sound”;

bgSoundObj.src = “”;

_ = bgSoundObj;

}

_.src = src;

} else {

if (_ == null) {

let audioObj = window.document.createElement(“audio”)

audioObj.id = “sound”;

audioObj.src = “”;

_ = audioObj;

}

_.src = src;

_.play();

}

} catch (error) {

console.error(error);

}

};

try {

apputils.speaker = new window.SpeechSynthesisUtterance();

} catch (error) {

apputils.speaker = {};

}

apputils.speakTimer = null;

apputils.stopTimer = null;

48.检测操作系统版本号(Mac | Unix | Android | Linux | Win2000 | WinXP | Win2003 | WinVistta | Win7 | Win10 | Volcano | other)

function detectOS() {

var sUserAgent = navigator.userAgent;

var isWin = (navigator.platform == “Win32”) || (navigator.platform == “Windows”);

var isMac = (navigator.platform == “Mac68K”) || (navigator.platform == “MacPPC”) || (navigator.platform == “Macintosh”) || (navigator.platform == “MacIntel”);

if (isMac) return “Mac”;

var isUnix = (navigator.platform == “X11”) && !isWin && !isMac;

if (isUnix) return “Unix”;

var isLinux = (String(navigator.platform).indexOf(“Linux”) > -1);

var bIsAndroid = sUserAgent.toLowerCase().match(/android/i) == “android”;

if (isLinux) {

if (bIsAndroid) return “Android”;

else return “Linux”;

}

if (isWin) {

var isWin2K = sUserAgent.indexOf(“Windows NT 5.0”) > -1 || sUserAgent.indexOf(“Windows 2000”) > -1;

if (isWin2K) return “Win2000”;

var isWinXP = sUserAgent.indexOf(“Windows NT 5.1”) > -1 ||

sUserAgent.indexOf(“Windows XP”) > -1;

if (isWinXP) return “WinXP”;

var isWin2003 = sUserAgent.indexOf(“Windows NT 5.2”) > -1 || sUserAgent.indexOf(“Windows 2003”) > -1;

if (isWin2003) return “Win2003”;

var isWinVista = sUserAgent.indexOf(“Windows NT 6.0”) > -1 || sUserAgent.indexOf(“Windows Vista”) > -1;

if (isWinVista) return “WinVista”;

var isWin7 = sUserAgent.indexOf(“Windows NT 6.1”) > -1 || sUserAgent.indexOf(“Windows 7”) > -1;

if (isWin7) return “Win7”;

var isWin10 = sUserAgent.indexOf(“Windows NT 10.0”) > -1 || sUserAgent.indexOf(“Windows 10”) > -1;

if (isWin10) return “Win10”;

var isVolcano = sUserAgent.indexOf(“volcano”) > -1;

if (isVolcano) return “Volcano”;

return “Windows”;

}

return “other”;

};

49.判断应用部署模式(CS | BS)

function getDeployMode() {

let href = window.location.href;

ContextUtils.localUtils.set(“versionCheckPath”, href)

let str = href.substring(0, 4);

if (str !== ‘’) {

if (str == ‘http’) {

let httpadd = href.split(‘//’)[1];

if (httpadd.split(‘:’) !== -1) {

let ipAddress = httpadd.split(‘:’)[0];

if (ipAddress == ‘localhost’) {

return ‘CS’

} else {

if (ipAddress.split(‘.’)[0] == ‘127’) {

return ‘CS’

} else {

return ‘BS’

}

}

}

return ‘’;

}

if (str == ‘file’) return ‘CS’

return ‘’

}

return ‘’;

}

50.获取JS字符串字节数,str 要计算的字符串(str的字节数,中文占2个字节,英文占1个字节)

function getStrByteLen(str) {

let len = 0;

if(str && typeof str == “string”) {

for(let i = 0; i < str.length; i++) {

if(str.charCodeAt(i) > 255) {

len += 2;

} else {

len += 1;

}

}

}

return len;

}

51.格式化手机号(11位手机号)

function formatMobile(mobile) {

let str = 0;

if(mobile && typeof mobile == “string” && mobile.length == 11) {

str = mobile.substring(0, 3) + " " + mobile.substring(3, 7) + " " + mobile.substring(7)

}

return str;

}

52.左补两位

function (str){

if(str.length === 1){

return “0” + str;

}

return str

}

53.hex -> dsp(hex 十六进制压缩码 如[0x12, 0x34, 0x56], dsp 如 “123456”)

function hex2Dsp(hex, lowerCase) {

let dsp = []

if(!hex || hex.length <= 0) {

console.error(传入的hex为空或长度为0);

return “”;

}

hex.forEach(item => {

dsp.push(this.leftPad2Bit(item.toString(16)));

})

let dspStr = dsp.join(“”);

if(lowerCase) {

dspStr = dspStr.toLowerCase();

} else {

dspStr = dspStr.toUpperCase();

}

return dspStr;

}

54.dsp -> hex

function (dsp) {

let bytes;

if(dsp && dsp.length % 2 === 0) {

bytes = new Uint8Array(dsp.length / 2);

for (let index = 0; index < dsp.length; index+=2) {

let b = parseInt(dsp.substr(index, 2), 16);

bytes[index/2] = b;

}

} else {

console.error(传入的dsp非法,为空或者非偶数倍长度${dsp});

}

return bytes;

}

55.分量亦或合成(itemA 分量A,itemB 分量B,bDsp 是否扩展 true,则传入的itemA与itemB与返回的合成变量都为扩展码,否则都为Uint8Array类型的压缩码数组)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)


后记


总结一下这三次面试下来我的经验是:

  1. 一定不要死记硬背,要理解原理,否则面试官一深入就会露馅!

  2. 代码能力一定要注重,尤其是很多原理性的代码(之前两次让我写过Node中间件,Promise.all,双向绑定原理,被虐的怀疑人生)!

  3. 尽量从面试官的问题中表现自己知识的深度与广度,让面试官发现你的闪光点!

  4. 多刷面经!

我把所有遇到的面试题都做了一个整理,并且阅读了很多大牛的博客之后写了解析,免费分享给大家,算是一个感恩回馈吧,有需要的朋友【点击我】免费获取。祝大家早日拿到自己心怡的工作!

篇幅有限,仅展示部分内容



dspStr;

}

54.dsp -> hex

function (dsp) {

let bytes;

if(dsp && dsp.length % 2 === 0) {

bytes = new Uint8Array(dsp.length / 2);

for (let index = 0; index < dsp.length; index+=2) {

let b = parseInt(dsp.substr(index, 2), 16);

bytes[index/2] = b;

}

} else {

console.error(传入的dsp非法,为空或者非偶数倍长度${dsp});

}

return bytes;

}

55.分量亦或合成(itemA 分量A,itemB 分量B,bDsp 是否扩展 true,则传入的itemA与itemB与返回的合成变量都为扩展码,否则都为Uint8Array类型的压缩码数组)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-aBPdYD4e-1713504650063)]

[外链图片转存中…(img-Xdeg9AMa-1713504650064)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-JnHfZwal-1713504650064)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-lffYthFu-1713504650064)]
后记


总结一下这三次面试下来我的经验是:

  1. 一定不要死记硬背,要理解原理,否则面试官一深入就会露馅!

  2. 代码能力一定要注重,尤其是很多原理性的代码(之前两次让我写过Node中间件,Promise.all,双向绑定原理,被虐的怀疑人生)!

  3. 尽量从面试官的问题中表现自己知识的深度与广度,让面试官发现你的闪光点!

  4. 多刷面经!

我把所有遇到的面试题都做了一个整理,并且阅读了很多大牛的博客之后写了解析,免费分享给大家,算是一个感恩回馈吧,有需要的朋友【点击我】免费获取。祝大家早日拿到自己心怡的工作!

篇幅有限,仅展示部分内容



  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值