js零碎点

作者: 哭不是罪 | 来源:发表于2020-04-18 13:04 被阅读0次

    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 (
                <div>
                    <div>
                        <label htmlFor="name">姓名:</label>
                        <input id="name" type="text" data-type="name" placeholder="请输入姓名" onChange={this.onChange} />
                    </div>
                    <div>
                        <label htmlFor="mobile">手机号:</label>
                        <input id="mobile" type="number" data-type="mobile" placeholder="请输入手机号" onChange={this.onChange} />
                    </div>
                    <button onClick={this.onSubmit}>提交</button>
                </div>
            )
        }
    }
    
    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是一个很随意的出现,其中的很多语法也很随意,研究这些随意也是一件快乐的事。

    个人总结,如有错误,望请指正。

    相关文章

      网友评论

        本文标题:js零碎点

        本文链接:https://www.haomeiwen.com/subject/wnjjvhtx.html