js零碎点

1.关于[ ] [ ] 最常用于创建数组,但是除了这个,它还具有“解析变量”的作用 例如我们看一段关于react的代码片段 import React from "react" class Index extends React.Component { constructor() { super(); this.state = { name: "", mobile: "", } this.onChange = this.onChange.bind(this); this.onSubmit = this.onSubmit.bind(this); } onChange (e) { let type = e.target.getAttribute("data-type"); let value = e.target.value; this.setState({ [type]: value }); } onSubmit () { console.log("name is", this.state.name); console.log("mobile is", this.state.mobile); } render () { return (
) } } export default Index; 在name和mobile两个输入框中我使用了同一个onChange函数,按照一般写法,会使用判断去处理当前操作的是哪个输入域,应该给哪个state数据赋值。 这种情况下我们直接使用[ ]去解析type的类型,会得到相应的字符串,从而自动处理赋值。 如果不加[ ],而是this.setState({ type:value }),那么name和mobile两个属性都不会被赋值,而是给state下面的type属性赋值了。 2.关于if 可能有些粗心的情况下,在if判断中只使用了一个等号。 其实本身这种写法并没有任何语法错误,所以语法提示也不会告诉你这句话错了,从而程序运行结果跟预期不一样很难排查错误,等找了半天发现少写了等号,自己都想抽自己耳光了。 虽然这个点很小,但是难免也会发生,所以还是要知其所以然。 如 if( a = b ) .... 这个判断不一定能走进去,也不一定不能走进去,关键是括号中的返回结果。 = 含义是赋值运算符,它会将等号右边的运算结果返回给前面 例如: var a = 0; if (b = a) { console.log('exec'); } //这种情况下不会走进判断,因为b=a,小括号内的执行结果为0,if(0) ,js隐式转换为false,自然不会走进判断。 var a = 1; if (b = a) { console.log('exec'); } //这种情况下不会走进判断,因为b=a,小括号内的执行结果为1,if(1) ,js隐式转换为true,自然会走进判断。 3.关于( ) 在表达式中常见的()用法是提升优先级,其实它也是运算符,并且有返回值。 如果()中有多个以逗号分隔的元素,它总是会返回最后一个元素的运算结果。 例如: (2, 3);//3 (true, false); //3 (function a() { }, function b() { }); // function b(){} //结合刚才的if语句 if(true,0){ console.log('exec') } //这个判断是永远也进不去了 js是一个很随意的出现,其中的很多语法也很随意,研究这些随意也是一件快乐的事。 个人总结,如有错误,望请指正。

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):