var str = “atitpatel”;
var substr = “patel”;
console.log(str.indexOf(substr) !== -1);
11、如何替换所有出现的字符串
===================
1)、我们可以使用ES6来解决这个问题。
====================
str = str.replace(/test/g, ‘’);
2)、我们可以使用正则表达式。
let find = ‘ab’;
let re = new RegExp(find, ‘’);
let str = find.replace(re, ‘cd’);
console.log(str);
12、如何正确克隆JavaScript对象
=========================
1)、使用ES6
var val1 = {data: “value”};
var val2= Object.assign({}, val1);
2)、如果要浅拷贝
Object.assign({}, data)
3)、进行深复制
JSON.parse(JSON.stringify(data))
13、!!不是JavaScript中的运算符?
===========================
!! 将其右侧的值转换为其等效的布尔值。
!!false === false
!!true === true
!!0 === false
!!parseInt(“foo”) === false // NaN is falsy
!!1 === true
!!-1 === true // -1 is truthy
!!(1/0) === true // Infinity is truthy
!!“” === false // empty string is falsy
!!“foo” === true // non-empty string is truthy
!!“false” === true // …even if it contains a falsy value
!!window.foo === false // undefined is falsy
!!null === false // null is falsy
!!{} === true // an (empty) object is truthy
!![] === true // an (empty) array is truthy;
14、如何在JavaScript中循环遍历数组?
============================
我们有几种选择:
1)、顺序for循环:
var array = [“a”,“b”];
var arrayLength = array.length;
for (var i = 0; i < arrayLength; i++) {
console.log(“value”,array[i]);
}
2)、Array.prototype.forEach
const data = [“a”, “b”, “c”];
data.forEach(function (item, index) {
console.log(item, index);
});
3)、 ES6for-of声明
let data = [‘a’, ‘b’, ‘c’];
for (const a of data){
console.log(a);
}
15、如何使用JavaScript复制到剪贴板
===========================
通过执行以下操作,我们可以提示用户单击并输入:
function copy(text) {
window.prompt(“Copy to clipboard: Ctrl+C, Enter”, text);
}
现在,剪贴板复制操作为SAFE,因为用户单击了提示。
Copy here
16、如何测试一个空的JavaScript对象
===========================
有几种方法可以实现此功能。
1)、jQuery的:
jQuery.isEmptyObject({}); // true
2)、 lodash:
_.isEmpty({}); // true
3)、Underscore
_.isEmpty({}); // true
17、如何在JavaScript中使字符串的首字母大写
===============================
我们可以更新具有text-transform属性的CSS。
1)、在CSS中:
p:first {
text-transform:capitalize;
}
2)、使用函数,我们可以调用toUpperCase()方法。
function makeUpperCase(val)
{
return val && val[0].toUpperCase() + val.slice(1);
}
18、如何使用JavaScript更改元素的类?
============================
有很多需求,我们需要根据条件更改某些颜色或CSS。
如何在JavaScript中完成?
更改元素的所有类:
要将所有现有类替换为一个或多个新类,请设置className属性:
document.getElementById(“test”).className = “newclass”;
要将其他类添加到元素:
要将类添加到元素中而不删除或影响现有值,请添加空格和新的类名称,如下所示:
document.getElementById(“test”).className += " newClass";
要从元素中删除类:
要在元素中删除单个类而又不影响其他潜在类,则需要简单的正则表达式替换:
document.getElementById(“test”).className =
document.getElementById(“test”).className.replace
( /(?:^|\s)newClass(?!\S)/g , ‘’ )
19、是否可以将CSS应用于一半的字符?
================================
我们确实看到了一些精美的文字艺术,其中一半字符具有不同的颜色,而另一半字符具有不同的颜色,我们如何在CSS中实现这样的效果?
下面是使CSS适用于半角字符的示例。
h1 {
display: inline-block;
margin: 0; /* for demo snippet */
line-height: 1em; /* for demo snippet */
font-family: helvetica, arial, sans-serif;
font-weight: bold;
font-size: 300px;
background: linear-gradient(to right, #7db9e8 50%,#1e5799 50%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
XYZ
20、如何在数组中追加内容?
==================
在较早的JavaScript版本中,这是通过使用apply方法完成的。
该apply()方法调用具有给定this值的函数,并arguments以数组(或类似数组的对象)的形式提供。
let array1 = [33, 45, 5];
let array2 = [100, 2];
Array.prototype.push.apply(array2, array1);
console.log(array2); // [100, 2, 33, 45, 5]
使用ES6,可以使用扩展运算符完成此操作。
let array1 = [11, 42, 53];
let array2 = [1, 2];
array2.push(…array1);
console.log(array2); // [11, 2, 3, 42, 53]
21、如何检查对象是否为数组?
===================
当我们想检查对象是否为数组时,可以遵循以下选项。
let arr = [10,20,30,40,50];
Javascript(新旧浏览器):
function isArray(arr) {
return arr.constructor.toString().indexOf(“Array”) > -1;
}
function isArray(arr) {
return arr instanceof Array;
}
function isArray(arr) {
return Object.prototype.toString.call(arr) === ‘[object Array]’;
}
然后这样称呼它:
isArray(arr);
JavaScript(IE9 +,Ch5 +,FF4 +,Saf5 +,Opera10.5 +)
Array.isArray(arr);
下划线和Lodash:
_.isArray(arr);
22、如何检测未定义的对象属性?
====================
当我们想检查对象的特定属性是否未定义时,我们可以直接使用if条件和===运算符进行检查。
if(data.prop === undefined) {
alert(“it is: undefined
”);
}
要检查对象是否实际上没有这样的属性,并尝试访问它时,默认情况下将返回undefined:
if(!o.hasOwnProperty(‘prop’)) {
alert("not exisiting);
}
检查与标识符关联的值是否为特殊值undefined,或者尚未声明该标识符。
if(typeof variable === ‘undefined’) {
alert(‘variable is undefined
, or it is not declared’);
}
23、如何在JavaScript中将字符串转换为布尔值?
================================
有几种方法可以在JavaScript中将字符串转换为布尔值。
使用测试方法
var stringValue = “true”;
var boolValue = (/true/i).test(stringValue) //returns true
使用比较运算符
var val = “true”;
var boolValue = (val ==“true”); //returns true
使用JSON.parse
var val = “true”;
var boolValue = JSON.parse(val); //returns true
使用三元运算符
var val = “true”;
var boolValue = val.toLowerCase() == ‘true’ ? true : false; //returns true
使用 switch-case
var val = “true”;
var boolValue = getBoolean(val); //returns true
function getBoolean(value){
switch(value){
case true:
case “true”:
case 1:
case “1”:
case “on”:
case “yes”:
return true;
default:
return false;
}
}
24、如何获取JavaScript中的查询字符串值?
==============================
当我们处理URL参数并想从URL中提取信息时,这是最常见的用法。
下面是一些我们可以从中获取字符串值的方法。
ES2015(ES6):创建一种实现此功能的方法
getQueryStringParams = query => {
return query
? (/1/.test(query) ? query.slice(1) : query)
.split(‘&’)
.reduce((params, param) => {
let [key, value] = param.split(‘=’);
params[key] = value ? decodeURIComponent(value.replace(/+/g, ’ ')) : ‘’;
return params;
}, {}
-
)
- {}
};
URLSearchParams从位置使用内置方法。
你可以在location以下位置使用它:
let params = new URLSearchParams(location.search);
let params = (new URL(location)).searchParams;
let url = new URL(‘https://abc.com?val1=1&val2=2’);
let params = new URLSearchParams(url.search);
我们还可以使用.searchParamsURL对象的简写属性来获取参数,如下所示:
let params = new URL(‘https://abc.com?val1=1&val2=2’).searchParams;
params.get(‘val1’); // “1”
params.get(‘val2’); // “2”
25、如何获取JavaScript对象的长度?
===========================
在大多数情况下,我们确实检查数组的长度,但是,如果要检查对象的长度怎么办?以下两种方法是获取对象长度的最佳方法。
1、使用ES6功能
let size = Object.keys(data).length;
2、使用下划线
_.size({val1 : 1, val2 : 2, val3 : 3});
26、如何反转包含复杂表情符号的字符串?
========================
当我们进行更多编程或遇到一些编码挑战时,这是其中最常见的问题。
我们可以使用lodash功能来解决这一挑战。
function reverse(txt) { return _.split(txt, ‘’).reverse().join(‘’); }
const data = ‘abc abc???’;
console.log(reverse(data));
27、如何在JavaScript中将字符串转换为对象数组?
=================================
当我们从无法控制的第三方API中获取一些数据时,就会出现这种情况。我们如何将字符串转换为对象数组以在我们的应用程序中使用?下面是实现此结果的最简单方法
const str = ‘Option 1|false|Option 2|false|Option 3|false|Option 4|true’;
data = [];
for (let i = 0, a= str.split(‘|’); i < a.length; i += 2) {
const
option = a[i],
value = JSON.parse(a[i + 1]);
data.push({ option, value });
}
console.log(data);
28、如何检测用户是否更改了JavaScript中的选项卡?
==================================
这可以通过JavaScript支持的最新事件侦听器功能来实现。
下面是处理选项卡状态的解决方案。
document .addEventListener(“visibilitychange”, event => {
if (document.visibilityState == “visible”) {
console.log(“activated”)
} else {
console.log(“inactivated”)
}
})
29、如何从一个对象数组求和一个属性值?
========================
当我们有一个包含一些数字的对象数组时,我们想在下面求和是带有reduce的解决方案。
const data = [
{ val1: ‘abc’, val2: 50 },
{ val1: ‘abc’, val2: 50 },
{ val1: ‘cde’, val2: 75 },
{ val1: ‘hji’, val2: 35 },
{ val1: ‘bbc’, val2: 25 },
];
console.log(data.reduce((n, {val2}) => n + val2, 0))
30、如何格式化JavaScript日期?
=========================
当我们格式化日期时,更令人头疼,因为我们确实根据需求有不同的要求。我们如何才能满足每个人的需求?以下是广泛用于在JavaScript中格式化日期的最常用方法。
1)、你可以使用本机 .toLocaleDateString()
例子:
new Date().toLocaleDateString() // 1/06/2021
new Date().toLocaleDateString(‘en-US’, {year: ‘numeric’, month: ‘2-digit’, day: ‘2-digit’}); // 01/06/2021 (month and day with two digits)
new Date().toLocaleDateString(‘en-ZA’); // 2020/01/06(year/month/day) notice the different locale
new Date().toLocaleDateString(‘en-CA’); // 2021-01-06 (year-month-day) notice the different locale
new Date().toLocaleString(“en-US”, {hour: ‘2-digit’, hour12: false, timeZone: “America/New_York”}); // 07 (just the hour)
2)、我们可以使用moment.js
var now = new Date();
var dateString = moment(now).format(‘YYYY-MM-DD’);
var dateStringWithTime = moment(now).format(‘YYYY-MM-DD HH:mm:ss’);
31、如何在JavaScript中生成随机字符串/字符?
================================
很多时候,我们需要向后端发送一些随机的唯一ID。实现此功能的解决方案有成千上万种,但以下是我最喜欢的一种。
生成一个安全的随机字母数字Base-62字符串:
function generateUID(length)
{
return window.btoa(Array.from(window.crypto.getRandomValues(new Uint8Array(length * 2))).map((b) => String.fromCharCode(b)).join(“”)).replace(/[+/]/g, “”).substring(0, length);
}
console.log(generateUID(22)); // “cFg3Upv2cE5cK8Xd7hHwWp”
console.log(generateUID(5)); // “CAGkP”
32、在字段中输入3个字符后如何执行API调用?
============================
当我们要搜索用户名或某个已经存在的值但又要避免一直调用时,我们经常要等到用户键入某些字符后再调用API,这是最常用的方法。
这可以使用distinctUntilChanged来实现,并且你可以使用filter。
this.service.getData(data)
.pipe(
filter(_ => data.length === 3),
distinctUntilChanged()
).subscribe(rs => console.log(rs));
33、如何重命名数组内的对象键?
====================
有时我们需要更改键来操作数据。这是在数组中重命名对象键的有效方法之一。
你可以使用Object.values()它来检索值,然后array.reduce()组成一个新的对象:
const data = [{
prop_name: ‘test1’,
prop_age: 45,
prop_email: ‘test1@test.com’,
},
{
prop_name: ‘test2’,
prop_age: 41,
prop_email: ‘test2@test.com’,
},
{
prop_name: ‘test3’,
prop_age: 45,
prop_email: ‘test3@test.com’,
},
];
const newKey = [
‘firstname’,
‘age’,
‘email’
];
let resultData = data.map(obj =>
Object.values(obj).reduce((acc, cur, i) => {
acc[newKey[i]] = cur;
return acc;
}, {}));
console.log(resultData);
34、如何清除javascript中的焦点?
==========================
焦点…焦点…是的,这一次,我们想从HTML中的特定元素中清除焦点。这可以通过模糊方法来实现。
if (document.activeElement instanceof HTMLElement)
document.activeElement.blur();
35、JavaScript中的二进制到字符串
==========================
如果我们有一些二进制代码,并且想要在将其用于代码之前将其转换为字符串,该怎么办?可以使用fromCharCode方法实现。
let binary = `1010011 1110100 1100001 1100011 1101011
1001111 1110110 1100101 1110010 1100110
1101100 1101111 1110111`;
let newData = binary.split(’ ') //Split string in array of binary chars
.map(bin => String.fromCharCode(parseInt(bin, 2))) //Map every binary char to real character
.join(‘’); //Join the array back to a string
console.log(newData);
36、移位字符串在JavaScript中向左和向右循环
===============================
这种javascript编码问题很常见。这是基于给定值移动字符串的示例。可以使用数组切片方法来实现。
function getShiftedString(s, leftShifts, rightShifts) {
// using split('')
will result in certain unicode characters being separated incorrectly
// use Array.from instead:
const arr = Array.from(s);
const netLeftShifts = (leftShifts - rightShifts) % arr.length;
return […arr.slice(netLeftShifts), …arr.slice(0, netLeftShifts)]
.join(‘’);
}
console.log([
getShiftedString(‘abc’, 0, 0),
getShiftedString(‘abc’, 1, 0),
getShiftedString(‘abc’, 0, 1),
getShiftedString(‘abc’, 1, 1),
getShiftedString(‘123456789’, 0, 0),
getShiftedString(‘123456789’, 1, 5),
getShiftedString(‘123456789’, 5, 1),
‘----’,
getShiftedString(‘123456789’, 9, 0),
getShiftedString(‘123456789’, 10, 0),
getShiftedString(‘123456789’, 0, 9),
getShiftedString(‘123456789’, 0, 10),
getShiftedString(“???❤”, 0, 0),
getShiftedString(“???❤”, 1, 0),
]);
37、检查IP地址的正则表达式JavaScript
=============================
正则表达式可帮助我们检查任何特定的字符串并为我们验证?如果我们要使用正则表达式作为IP地址该怎么办。我在这里喜欢Mahdi Pedram解决方案来实现这一目标。
这是验证IP地址的最干净的方法,下面将其分解:
事实:一个有效的IP地址具有4 octets,每个八位字节可以是一个介于0 - 255
正则表达式的细分,该正则表达式匹配之间的任何值 0 - 255
-
25[0-5] matches 250 - 255
-
2[0-4][0-9] matches200 - 249
-
1[0-9][0-9] matches 100 - 199
-
[1-9][0-9]? matches 1 - 99
-
0 matches 0
const octet = ‘(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)’;
注意:使用new RegExp时应使用\\.而不是\.因为字符串将被转义两次。
function isValidIP(str) {
const octet = ‘(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)’;
const regex = new RegExp(^${octet}\\.${octet}\\.${octet}\\.${octet}$
);
return regex.test(str);
}
38、如何用JSON对JavaScript日期进行字符串化并保留时区
======================================
当我们要将任何特定的日期格式值存储到JSON时。使用此功能可以实现。
var changeValue = function(key, value) {
if (this[key] instanceof Date) {
return this[key].toUTCString();
}
return value;
}
console.log(JSON.stringify(new Date(), changeValue));
console.log(JSON.stringify({ myProperty: new Date()}, changeValue));
39、JavaScript检查字符串是否为有效数字
=============================
我们已经看到了很多解决方案来检查数字是否有效,但是如果要检查字符串是否是有效数字怎么办?
这是最好的方法。
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
以下是一些很好的测试用例:
console.log(isNumeric(123456898898912345678912)); // true
console.log(isNumeric('2 ')); // true
console.log(isNumeric('-42.2 ')); // true
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!
可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。
。
var changeValue = function(key, value) {
if (this[key] instanceof Date) {
return this[key].toUTCString();
}
return value;
}
console.log(JSON.stringify(new Date(), changeValue));
console.log(JSON.stringify({ myProperty: new Date()}, changeValue));
39、JavaScript检查字符串是否为有效数字
=============================
我们已经看到了很多解决方案来检查数字是否有效,但是如果要检查字符串是否是有效数字怎么办?
这是最好的方法。
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
以下是一些很好的测试用例:
console.log(isNumeric(123456898898912345678912)); // true
console.log(isNumeric('2 ')); // true
console.log(isNumeric('-42.2 ')); // true
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-atfCllcR-1713451962093)]
[外链图片转存中…(img-eygSf22F-1713451962094)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-JAFGWr6H-1713451962094)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
[外链图片转存中…(img-cpcjhQPf-1713451962094)]
最后
今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!
可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。
?# ↩︎