预计会有上千道题,后续慢慢补!
function caseConvert(str){
return str.replace(/([a-z]*)([A-Z]*)/g, (m, s1, s2)=>{
return `${s1.toUpperCase()}${s2.toLowerCase()}`
})
}
caseConvert('AsA33322A2aa') //aSa33322a2AA
function strToCamel(str){
return str.replace(/(^|_)(\w)/g,(m,$1,$2)=>$2.toUpperCase());
}
function delLast(str,target) {
let reg =new RegExp(`${target}(?=([^${target}]*)$)`)
return str.replace(reg,'')
}
const str = ' s t r '
const POSITION = Object.freeze({
left: Symbol(),
right: Symbol(),
both: Symbol(),
center: Symbol(),
all: Symbol(),
})
function trim(str, position = POSITION.both) {
if (!!POSITION[position]) throw new Error('unexpected position value')
switch(position) {
case(POSITION.left):
str = str.replace(/^\s+/, '')
break;
case(POSITION.right):
str = str.replace(/\s+$/, '')
break;
case(POSITION.both):
str = str.replace(/^\s+/, '').replace(/\s+$/, '')
break;
case(POSITION.center):
while (str.match(/\w\s+\w/)) {
str = str.replace(/(\w)(\s+)(\w)/, `$1$3`)
}
break;
case(POSITION.all):
str = str.replace(/\s/g, '')
break;
default:
}
return str
}
const result = trim(str)
console.log(`|${result}|`) // |s t r|
描述:
var arr = new Array(5);
var num = randomNumber();
var i = 0;
randomArr(arr,num);
function randomArr(arr,num) {
if (arr.indexOf(num)< 0){
arr[i] = num;
i++;
} else {
num = randomNumber();
}
if (i>=arr.length){
console.log(arr);
return;
}else{
randomArr(arr,num)
}
}
function randomNumber() {
return Math.floor(Math.random()*31 + 2)
}
const removeSymbol = (str) => str.replace(/\t|\n|\r/g, "");
const str =
"\t11122233\n_aaaaaaa\r\n_bbbbbb\t_3333333\r_4444444\n_555555";
console.log(removeSymbol(str));
var childInNums = parent.split(child).length - 1, 这个没毛病吧
//或者
str.match(new RegExp(`${target}`, 'g')).length
function encode (str) {
return btoa(encodeURIComponent(str));
}
function decode (str) {
return decodeURIComponent(atob(str));
}
// 利用 base64, 浏览器环境自带 btoa / atob 方法
// Node.js 需要引入相关库
const str = "abcdefg";
console.log(btoa(str));
console.log(atob(btoa(str)));
// 凯撒密码
const encodeCaesar = ({str = "", padding = 3}) =>
!str
? str
: str
.split("")
.map((s) => String.fromCharCode(s.charCodeAt() + padding))
.join("");
const decodeCaesar = ({str = "", padding = 3}) =>
!str
? str
: str
.split("")
.map((s) => String.fromCharCode(s.charCodeAt() - padding))
.join("");
console.log(encodeCaesar({str: "hello world"}));
console.log(decodeCaesar({str: "khoor#zruog"}));
typeof argument //如果结果为object,则用toString.call再次判断
Object.prototype.toString.call(argument).replace(/^.{8}(.+)]$/,(m,$1)=> $1.toLowerCase());
回调是把一个函数作为参数传递给另一个函数,当该函数满足某个条件时触发该参数函数。
主要用于异步操作 例如网络请求 防止页面同步代码阻塞导致渲染线程停止
服务端推送
webSocket
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
eventsource(SSE)
EventSource 接口是 Web 内容与服务器发送的事件的接口。一个 EventSource 实例打开一个持久连接 HTTP 服务器,它发送事件的 text/event-stream 格式。连接保持打开状态,直到通过调用关闭 EventSource.close()。
与 WebSockets 不同,服务器发送的事件是单向的。也就是说,数据消息是从服务器到客户端(例如用户的 Web 浏览器)沿一个方向传递的
Web Push
就是用户订阅了一个站点的 Web Push 服务后,即使用户关闭了浏览器,一旦站点主动发送推送消息,用户都能收到,只要你的电脑是开着的。这是目前谷歌和苹果在 Chrome 和 Safari 上都力推的一种全新推送服务,Firefox 最近也加入了这个阵营。
但是由于需要 GCM 支持,所以这个方法并不常见
function getParams(name) {
const { search } = window.location;
const params = new URLSearchParams(search);
return params.get(name)
}
闭包的定义:从外部访问或者操作函数内部变量的的方式,缓存数据,延长作用域链(JS是函数作用域)
例子:定义了一个内部变量,但是不想使这些变量不能被外部随意修改,同时又可以通过指定的函数接口来操作来访问,闭包的作用常常用来「间接访问一个变量」。换句话说,「隐藏一个变量」
优点:以隐藏变量以及防止变量被篡改和作用域的污染,从而实现封装。模块化编程。
缺点:函数中的变量不能及时的释放
function Foo(){
var name = "fooname"; //需要从外部访问这些变量
var age = 12;
this.getFoo = function(){ //设置访问方法
return name;
}
this.setFoo = function(){
return age;
}
this.xgFoo = function(new){
name = new;
}
}
var foo = new Foo();
foo.getFoo(); //访问name变量。
foo.xgFoo("liz") //从外部修改nage变量
function uniqueArr(arr) {
return [...new Set(arr.flat(Infinity))]
}
[1,2,3,4,4,5,5,2].filter((item, index, arr) => arr.indexOf(item) === index)