笔试时经常用到的JS函数
获取类型:typeof
类型转换:
- 字符串转换:String()
- 数字型转换:Number()
- 布尔型转换:Boolean()
运算符:
- 加号 + 在前则会将其他转化为数字
箭头函数:
let sayHi = () => alert("Hello!");
sayHi();
定义对象:let user = { name: "John" };
深拷贝:var deep = _.cloneDeep(user);
数字类型的方法:
- let ms = 1e-6; // 1 的左边有 6 个 0
- 机制转换:num.toString(base)
如果没有base,将会被转换成字符串
- 四舍五入:Math.floor Math.ceil Math.round
- 解决小数不精确:+sum.toFixed(n) n是保留几位小数,默认为0;且 toFixed 总是返回一个字符串
-
Math.random() Math.max(a, b, c...) Math.pow(n, power)
字符串
- 转义字符: str.length 是一个数字属性,而不是函
- 访问字符: str[0]
- 字符串是不可变的:通常的解决方法是创建一个新的字符串
- 改变大小写: toLowerCase() 和 toUpperCase() 方法可以改变大小写:
- 查找子字符串: str.indexOf('id', 2),反向查找字符串str.lastIndexOf();
- 获取子字符串: str.slice(start [, end]) 返回字符串从 start 到(但不包括)end 的部分。
- str.replace(str|regexp, str|func) alert('12-34-56'.replace("-", ":"))
- 是否包含字符串:includes; 匹配字符串:
- str.match(reg) 数组的第一个值为符合匹配的结果;str.search()返回第一个匹配位置的索引,如果没有找到的话返回-1
- trim:删除字符串前后所有的空格 split
- 合并字符串:str1+str2; res=res.concat(i) concat() 方法不会修改原字符串的值
数组
- 创建数组:Array.form(a1, x => x**2),Array.of(1, 2, 3, 4)
- pop/push---栈操作, shift/unshift---队列操作
- indexOf/lastIndexOf
- 循环:对于数组来说还有另一种循环方式,for..of:
- arr.splice 方法可以说是处理数组的瑞士军刀。它可以做所有事情:添加,删除和插入元素。
- arr.splice(start[, deleteCount, elem1, ..., elemN])---注意不要和slice搞混了
- arr.concat 创建一个新数组
- 数组迭代:arr.map((item,index,arr)=>{item*2}) /filter 返回数组; every/some 返回true/false ;forEach无返回,相当于遍历
- arr.sort( (a, b) => a - b );
- arr. join(',')
-
数组归并:reduce/reduceRight
let sum = values.reduce((prev, cur, index, array) => prev + cur,初始值); prev上一次的累计值
对象
- obj[a]中的a可以是变量名,但是obj."a"中.后面必须是字符串
js字符与ASCII码互转的方法
a.charCodeAt()可以查看指定码元的字符编码
charAt()方法返回给定索引位置的字符
String.fromCharCode(n);
a-z:97- A-Z :65- 0-9:48 45678
正则表达式模式匹配的方法
- 正则表达式
!!!返回的索引值默认是从1开始的
- 字符串
search
match
replace
split
join: str.match(regexp).join('')
进制转换
函数
arguments对象表示函数的实参集合,仅能够在函数体内可见,并可以直接访问
获取参数个数 :arguments.length
arguments 对象是一个伪类数组,不能继承Array的原型方法,可以使用数组下标形式访问每个实参
时间处理
new Date()
不带参数 —— 创建一个表示当前日期和时间的 Date 对象:
new Date(milliseconds)
不带参数 —— 创建一个表示当前日期和时间的 Date 对象:
new Date(milliseconds)
创建一个 Date 对象,其时间等于 1970 年 1 月 1 日 UTC+0 之后经过的毫秒数(1/1000 秒)
new Date(datestring)
new Date(year, month, date, hours, minutes, seconds, ms)
使用当前时区中的给定组件创建日期。只有前两个参数是必须的。
- year 必须是四位数:2013 是合法的,98 是不合法的。
- month 计数从 0(一月)开始,到 11(十二月)结束。
date.getFullYear gerMonth getDay getDate getHours getMinutes getSeconds
Document
nodeName
nodeValue
nodeType属性 element 1 Attr 2 Text 3
- 访问节点:
parentNode
childNodes
firstChild
lastChild
- 操作节点:
appendChild
insertBefore
removeChild
replaceChild
hasChildNodes
cloneNode(true)深拷贝
!!!一个数组根据另外一个数组排序
实际动手能力还是有待提高
元素节点
document.getElementsByTagName("ul")[0] 返回的是数组
document.getElementById("box")
document.getElementsByClassName
- 读取/插入HTML字符串
node.HTML=
- 读写文本
node.innerText=
CSS选择器
querySelector() 返回一个匹配元素
querySelectorAll() 返回匹配元素的集合
生成任意颜色:
'#'+Math.floor(Math.random()*0xffffff).toString(16);
实现向后插入,可以获取当前的元素下一个元素,然后InsertBefore
删除矩阵内的所有节点:
想正常的删除全部节点
的话,我们应该从后面往前删除,代码如下:
for(var i = childs.length - 1; i >= 0; i--) {
alert(childs[i].nodeName);
f.removeChild(childs[i]);
}
的话,我们应该从后面往前删除,代码如下:
for(var i = childs.length - 1; i >= 0; i--) {
alert(childs[i].nodeName);
f.removeChild(childs[i]);
}
绘图
ctx.arcTo(x1,y1,x2,y2,r) 点代表的位置
ctx.lineWidth=;后面不用加单位
spread运算符、rest操作符及解构赋值
- spread:主要应用于数组的解析和构造 一维
[son1, ...son2] = arr1
实现数组深拷贝a=[...b]
字符串转数组 var arr = [...str];
复制对象{...obj1}------不能直接展开对象,因此必须外面包裹一层大括号
变量值交换 [x, y] = [y, x];
- rest操作符让函数的所有参数可由一个变量统一接收
- 解构赋值
对象分配变量:const {x, y, z} = obj;----根据键值
数组分配变量:[a, b] = [1,2,3,45];// 1, 2
const [a, b,,, c] = arr;
它会按顺序自动获取对应位置的值。再看看如何获取指定位置的值
函数对象参数:function name({num,sex}){}
数据去重:
1、set方法
var a=Array.from(new Set([...b,...c])
2 for...of Object
for (let i of a){
for (let i of a){
if(! obj[i]){
res.push(i)
obj[i]=i
}
}
}
return res
对象Object的常用方法:
- Object.keys(obj) —— 返回一个包含该对象所有的键的数组。
- Object.values(obj) —— 返回一个包含该对象所有的值的数组。
- Object.entries(obj) —— 返回一个包含该对象所有 [key, value] 键值对的数组。
- Object.assign(target,source1,source2,…)将源对象(source)的所有可枚举属性,复制到目标对象
- Object.defineProperty(obj, prop, descriptor)
- Object.hasOwnProperty(key) 必须实例上本身有这个性质才可以。
-
in 可以通过对象访问指定属性时返回 true,无论该属性是在实例上还是在原型上 "name" in person
-
Object.setPrototypeOf(obj,prototype)设置对象的原型对象
用对象的键值对近似替代哈希表?
let res=new Object()
for (let i of arr){
if (i in res){
res[i]++
}else{
res[i]=1
}
}
let num=0
for (let j in res){
if(res[j]>1 && iszhi(res[j])){
num++
}
}