美文网首页
JS良好的编写习惯(不定期跟新)

JS良好的编写习惯(不定期跟新)

作者: 小丘啦啦啦 | 来源:发表于2019-04-12 18:11 被阅读0次

一、变量的定义命名
虽然这个没有硬性规定,为了规范还是要遵循一些约定。
1、变量的定义
好的做法是将要使用的变量名用var(es6,let/const)关键字一起定义在代码的开头,变量名之间用逗号,隔开。好处:

  • 便于理解,很清除下面的代码会用到哪些变量。
  • 方便管理,变量定义与逻辑代码分开
  • 因为js的变量提升特性(es6,let/const就没有变量提升特性了),代码之间的变量定义在编译时还是会被提到最前面,这样做也符合逻辑。

2、变量和函数名命名

  • 允许包含字母、数字、美元符号$和下划线_,但第一个字符不允许是数字,不允许包含空格和其他标点符号。(这是js规定)
  • 一般变量、局部变量,首单词首字母小写,后面单词首字母大写(驼峰命名法),var winUrl = '123'
  • 对于常量、全局变量,采用全大写,单词之间下划线_分隔(帕斯卡命名法),var SAVE_OR_REV = true
  • jQuery选择器获后赋值变量,变量以$开头命名。这样做可以很方便的与普通变量区分开,一看到$就知道可以直接调用jQuery相关方法。

二、引号的使用
html代码里面使用双引号""(属性值只能用双引号),js中优先使用单引号''(虽然双引号也可以)。

<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script typet="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
        <p id="text"></p>
        <script>
            var name = '百度';
            //href=".." HTML中保持双引号,JavaScript中保持单引号
            document.getElementById('text').innerHTML = '<a href="http://baidu.com/">'+name+'</a>';   
        </script>
    </body>
</html>

js中引号里面还需要引号时,单双引号嵌套才符合规则,或者用转译。坚持这样写代码清晰,不会出现这里单引号那里双引号,代码有点乱。
三、对象字面量的属性名

  • 对象内属性名如果有以-分隔单词的写法,需要加上引号把属性包裹(否则编译报错Uncaught SyntaxError: Unexpected token -),其他可以不加引号。
    例如:
        <script>
            var obj = {
                name: 'qrx',
                ID: '12138',
                'course-catalog': ["语文", "数学"],
                courseCatalog: ["语文", "数学"],
            }
        </script>
  • 在Vue中,自定义指令(directive)名称是驼峰格式或组件(component)名称命名是驼峰格式,调用的时候需要把驼峰转小写然后-分隔。
    自定义指令:
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
             <input type="text" v-test-focus>
        </div>
        <script>
            Vue.directive('testFocus',{
                inserted(el){  
                    el.focus();
                }
            });
            const vm = new Vue({
                el:"#app",
            });
            
        </script>
    </body>
</html>

定义组件:

<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <style>

        </style>
    </head>
    <body>
        <div id="app">
            <!-- 调用时要转-分隔 -->
            <my-com1></my-com1>
        </div>
        <template id="tmp1">
            <div>
                <h3>组件名称为驼峰格式调用时要转化</h3>
            </div>
        </template>
        
        <script>
            Vue.component('myCom1',{   //组件名称为驼峰格式
                template: '#tmp1'  
            });
            var vm = new Vue({
                el: "#app",
            });
        </script>
    </body>
</html>
  • Vue中,父组件通过属性绑定向子组件传数据,绑定的属性名如果是驼峰格式,则绑定的时候需要把驼峰转小写然后-分隔,在子组件props数组中用驼峰形式声明。
<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>

    </style>
</head>

<body>
    <div id='app'>
        <!-- 通过属性绑定方式把父组件数据传递给子组件内部 -->
        <com1 :parent-msg = "msg"></com1>
    </div>

    <script>
        var vm = new Vue({
            el: "#app",
            data:{
                msg:'msg-父组件数据',
            },
            components:{
                com1:{
                    template:'<h1>这是子组件——{{parentMsg}}</h1>',   //子组件中使用父组件传递过来的数据
                    props:['parentMsg']   //父组件传递过来的属性在props数组中定义一下,这样才能使用这个数据
                },
            }
        });
    </script>
</body>

</html>

四、Vue指令后面的值
Vue指令后面的值会当作表达式来解析,直接解析为Vue实例中的data数据、者methods中的方法、js赋值等表达式等等。
如果想识别为字符串则需要在值的外层多套一层引号''

  • 例如自定义指令传参数:
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <!-- 此处900可不加,本身就是数值格式 -->
            <!-- red要识别为纯字符串,需要在外层再加上引号'' -->
            <!-- 否则会识别为表达式报错: [Vue warn]: Property or method "red" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. -->
            <span v-fontweight="900" v-color-swatch="'red'">画画</span>
            <!-- 此处指令后面color识别为表达式,即vue实例data数据或方法 -->
            <span v-color-swatch="color">写代码</span>
        </div>
        <script>
            const vm = new Vue({
                el: "#app",
                data: {
                    color: 'blue',
                },
                directives: { //自定义私有指令
                    'fontweight': {
                        bind(el, binding) {
                            el.style.fontWeight = binding.value;
                        },
                    },
                    'color-swatch'(el, binding) {
                        el.style.backgroundColor = binding.value;
                    }
                }
            });
        </script>
    </body>
</html>
  • 例如使用component属性展现组件:
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id='app'>
            <!-- component元素使用v-bind绑定is属性的值为组件名称,需要识别为字符串外层加上引号 -->
            <component :is="'sign'"></component>
        </div>
        
        <template id="templ1">
            <h2>登陆组件页面</h2>
        </template>
        <script>
            Vue.component('sign', {
                template: '#templ1',
            });
            Vue.component('register', {
                template: '#templ2',
            });
            var vm = new Vue({
                el: "#app",
                data: {
                    flag: true
                }
            });
        </script>
    </body>
</html>

五、组件名称和模板对象
注意:组件名称仅限于通过尖括号<>html中去使用;在路由规则的component属性的值只能是组件模板对象,不能是路由名称。

相关文章

网友评论

      本文标题:JS良好的编写习惯(不定期跟新)

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