笔试时经常用到的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) 
alert( 123456..toString(36) );  因为前面是数字所以要用两个点,区分小数点;变量则不用
如果没有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

正则表达式模式匹配的方法

  • 正则表达式
test--如果正则条件是全局时,可以理解为一个迭代器;如果需要重头开始时需要将reg.lastIndex设置为0;
!!!返回的索引值默认是从1开始的
  • 字符串
search
match
replace
split
join:  str.match(regexp).join('')  

进制转换


函数

arguments对象表示函数的实参集合,仅能够在函数体内可见,并可以直接访问
获取参数个数 :arguments.length
arguments 对象是一个伪类数组,不能继承Array的原型方法,可以使用数组下标形式访问每个实参

时间处理

new Date()
不带参数 —— 创建一个表示当前日期和时间的 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]); 
}
绘图
ctx.arcTo(x1,y1,x2,y2,r) 点代表的位置
ctx.lineWidth=;后面不用加单位

spread运算符、rest操作符及解构赋值

  • spread:主要应用于数组的解析和构造     一维
var arradd = [...arr1, ...arr2];
[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){
   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++
                }
            }




全部评论

相关推荐

05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
ResourceUtilization:你是我见过最美的牛客女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务