前端定义一个变量怎么赋值进去 前端刷算法用什么语言?

[更新]
·
·
分类:互联网
4550 阅读

前端定义一个变量怎么赋值进去

前端刷算法用什么语言?

前端刷算法用什么语言?

选用JS
leecode可以用js刷题了,我大js越来越被认可了是吧。但是刷题中会因为忽略js的一些特性掉入坑里。我这里总结一下我掉过的坑。
坑1:js中数组对象是引用对象
js中除了object还有数组对象也是引用对象,这点常常被忽视,所以在递归的时候传递数组要用(0)这样复制一个一样的新数组,不然会出现你传入的数组会被同级的递归改变,结果就不对了。
所以只要数组复制的地方最好都要这么写,除非你真的想引用。而且注意是slice不是splice这两个方法差别很大,你如果用splice(0)也能得到数组的复制,但是你将会删了原数组,因为splice是一个操作
增加和删除的元素,返回值是删除的元素的集合。splice(0)是表示从idx为0开始删除到数组尾部,所以得到的返回值也是这个数组。slice(start,end)可以理解为切片,省略end表示到数组尾部,如果end为负
则从数组尾部开始数。
坑2:js中的sort是默认以字典序排序
一般排序的时候都以为如果是升序就不用写compare函数,然而js中的()是按字典序排序的,这就导致你如果数组中都是非负数用sort可以得到你想要的效果,但是有负数的话就不对了。
比如 arr [-1,-3,-5,7,4,-2] () console.log(arr)
你会得到[-1, -2, -3, -5, 4, 7]
所以要记得写compare函数,不要偷懒,写成匿名函数的形式最好 。
坑3:函数没有变量提升
其实这个一般不容易犯,主要当时我是和第二个坑结合了,我自定义compare函数的时候写的是 var compare function(a,b){return a-b} ,本来没错,但是我写在了sort的下面,于是sort找不到compare函数就按照默认的字符顺序排列,搞的
我还以为是compare定义出现了问题。函数中定义变量是有“变量提升”的,就是说你在函数的任何位置定义var a都相当于在函数最开始的地方定义了var a,所以用习惯了之后就忘了函数不是变量,没有变量提升了。你在下面定义会找不到。所以写compare函数的时
候写成匿名函数吧。
坑4:浮点数运算不精确
试试console.log(0.3-0.2)你会发现是0.09999999999999998。我发现只要有奇数的浮点数存在,js就无法精确计算。这应该跟浮点数在js中存储的机制有关系。这个问题没有太好的解决办法,一般来讲答案是要求保留2位或3位小数的,利用toFixed(n)直接保留
n位就可以了,这个方法本来就是四舍五入的。但是总有些情况你可能不想四舍五入而是想取上下界什么的,这样就只能靠一些方法hack比如你想取前两位:(a*100-b*100)/100这样。
坑5:判断数组为空
判断数组为空时不能像变量一样直接用 if(!arr),因为数组不会像变量那样隐式转换,所以可以在你知道arr是个数组的情况下使用arr.lengthgt0判断,但有些情况下可能那个变量还不是数组,就不能去length,所以网上看了一个比较周全的方法,就是先判断该对象到
底是不是数组类型的,然后再取长度判断

es6如何将json参数转成变量?

json是js对象的字符串表示法
现在软件开发前后端的数据传输基本采用 json 实现,前端工程师获得的json就是一个字符串,例如:
let json #39{#34a#34:#34hello#34,#34b#34:#34word#34}#39
前端工程师得到这样的字符串之后当然要将其转换成js的对象:
let obj (json) //转化成对象
前端如果需要将页面数据传送给后端:
let str (obj)
输出str会发现它是一个字符串。
json解构赋值:
let {a,b} (json)