Vue.js3学习篇--Vue组件的属性和方法

news2024/11/27 6:38:12

目录

一.属性和方法

1.属性基础

2.方法基础

二.计算属性和侦听器

1.计算属性

2.计算属性和函数的选择

3.计算属性的赋值

4.属性侦听

三.函数限流

四.表单数据的双向绑定

1.文本输入框

2.多行文本输入域

3.复选框和单选框

4.选择列表

   5.两个常用修饰符

     五.样式绑定

1.为HTML标签绑定class属性        

2.绑定内联样式

六.实战


一.属性和方法
1.属性基础

        在编写Vue组件时,组件的数据都放在data选项中,Vue组件的data选项是一个函数,该函数返回一些我们定义属性的数据

例如:

<script>
    const App={
        data(){
            return{
                count:0,
            }
        }
    }
</script>
2.方法基础

        组件的方法定义在methods选项中,在我们实现组件的方法时,可以放心地使用this关键字,Vue组件会自动将其绑定到当前组件实例本身

例如定义一个方法:

 methods:{
            addation(){
                this.count++
            }
        }

二.计算属性和侦听器

        大多数情况下,Vue组件中定义的属性数据组件都可以直接渲染到HTML元素,但是有写情况属性中的数据并不适合直接渲染,需要经过处理后再渲染,在Vue中,就可以使用计算机属性或侦听器来实现这种逻辑

1.计算属性

        之前的data函数中定义的属性是存储属性,存储属性的值是我们直接定义好的,这个属性只起到存储数据的作用。在Vue中还有一种计算属性,它不是用来存储数据,而是通过一些计算逻辑来实时地维护当前属性的值,计算属性在compute选项中定义。

例如:定义一个组件的type属性,当组件的count属性大于4时,type属性值为牛逼,否则为不牛逼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="Application">
    <div>{{count}}</div>
    <div>{{type}}</div>
    <button @click="addation">累加</button>
</div>
<script>
    const App={
        data(){
            return{
                count:0,
            }
        },
        methods:{
            addation(){
                this.count++
            }
        },
        computed:{
            type(){
                return this.count>4?"牛逼":"不牛逼"
            }
        },
    }
    let instance=Vue.createApp(App).mount("#Application")
    console.log(instance.count)
    console.log(instance.$data.count)
</script>
</body>
</html>

计算属性效果:

                

2.计算属性和函数的选择

        上面的代码实现我们也可以通过函数来实现,函数定义为:

  methods:{
            addation(){
                this.count++
            },
            type(){
                return this.count>4?"牛逼":"不牛逼"
            }
        }

插值变量定义为函数:

<div>{{type()}}</div>

        从运行的结果来说,使用函数和使用计算属性的结果一样,但实际上,计算属性是基于存储属性的值的变化而重新计算的,计算完成后,其结果会被缓存,下次访问计算属性时,只要依赖的属性没有变化,其内的逻辑代码不会被重复执行,而函数不一样,每次访问都会重新执行函数内的代码才可以得到结果。所以,在实际开发中,我们可以根据是否需要缓存这个标准来选择使用计算属性还是函数

3.计算属性的赋值

        存储属性主要用于数据的存储,通常情况下,计算属性只用来取值,不会存值,这个取值的方法我们称为get方法,但存值的方法我们可以自己实现,称为set方法。

例如:

     computed:{
        type:{
            //get方法取值
            get(){
                return this.count > 4?"牛逼":"不牛逼"
            },
            //set方法存值
            set(newValue){
                if (newVue=="牛逼"){
                    this.count=5
                }else {
                    this.count=0
                }
            }
        }
        }

即可通过get和set方法实现计算属性的存取值功能

4.属性侦听

        属性侦听是Vue非常强大的功能之一,使用属性侦听可以方便地监听某个属性的变化。在Vue组件中可以通过watch选项来定义属性侦听器。Vue侦听器提供的了两种语法的定义格式,分别是方法格式和对象格式

1.方法格式

  //侦听器定义在watch中,监听哪个数据,就把哪个数据当函数名
        watch:{
         watchname(oldvalue,newvalue){
             //语句
         }
        }

方法格式侦听器的缺点:

(1)首次进入浏览器的时候,无法立即触发一次侦听器

(2)如果侦听的是一个对象,对象里的数据发生了变化,并不会触发侦听器

2.对象格式

 //侦听器定义在watch中,监听哪个数据,就把哪个数据当函数名
        watch:{
         watchname(oldvalue,newvalue){
             //语句
         },
        //可以通过immediate控制侦听器自动触发一次,默认为false
        immediate:true
        //深度监听
        depp:true
        }

对象格式的缺点:

(1)可以通过immediate属性控制侦听器自动触发一次,当默认是false的

(2)不能监听到每一个属性的变化,除非设置deep属性

例如:

        在页面输入框中输入字符,如果超过10个字符弹出警告

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="Application">
  <input v-model="searchText"/>
</div>
<script>
    const App={
     data(){
         return{
             searchText:""
         }
     },
        watch:{
         searchText(oldValue,newValue){
             if (newValue.length>10){
                 alert("文本过长")
             }
         }
        }
    }
    let instance=Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

效果:


三.函数限流

        函数限流是指根据时间间隔,在指定时间间隔内不允许重复执行同一个函数,可以使用setTimeout函数来控制时间

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="Application">
    <button @click="click">按钮</button>
</div>
<script>
    const App={
        data(){
            return{
                throttle:false
            }
        },
        methods:{
            click() {
                if (!this.throttle){
                    console.log(Date())
                }else {
                    return
                }
                this.throttle=true
                setTimeout(()=>{
                    this.throttle=false
                },2000);
            },
        }
    }
    Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

        还有就是使用Lodash库进行函数限流。Lodash是一款高性能的JavaScript实用工具库,它提供了debounce函数来进行方法的调用限流,在使用前要先导入Lodash库:

<script src="https://unpkg.com/lodash@4.17.20/lodash.min.js"></script>

上面的代码可以改为:

 methods:{
         click:_.debounce(function () {
             console.log(Date())
         },200)
        }

四.表单数据的双向绑定

        双向绑定是Vue中处理用户交互的一种方式,文本输入框,多行文本输入域,单选框与多选框等都可以进行数据的双向绑定

1.文本输入框

        文本输入框的数据的绑定直接使用v-model指令设置就可以了,例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="Application">
    <input v-model="textfileld">
    <p>文本输入框内容:{{textfileld}}</p>
</div>
<script>
    const App={
        data(){
            return{
                textfileld:""
            }
        }
    }
    Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

渲染效果:

2.多行文本输入域

        多行文本可以使用textarea标签来实现,该标签支持换行和设置输出行数,绑定方式和input一样,如:

 <textarea v-model="textarea"></textarea>
    <p style="white-space: pre-line">多行文本:{{textarea}}</p>

效果:

        需要注意的是textarea元素只能通过v-model指令的方式来设置内容,不能直接在标签内插入文本,如下是错误的:

    <textarea v-modl="textarea">{{textarea}}</textarea>
3.复选框和单选框

        复选框input标签的类型为checkbox,单选框为radio,例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="Application">
<input type="checkbox" value="python" v-model="box">python
<input type="checkbox" value="java" v-model="box">java
<input type="checkbox" value="c++" v-model="box">c++
<p>{{box}}</p>
<input type="radio" value="man" v-model="box_1">man
<input type="radio" value="woman" v-model="box_1">woman
<p>{{box_1}}</p>
</div>
<script>
    var App={
        data(){
            return{
            box:[],
            box_1:""
        }
    }
    }
    Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

效果:

4.选择列表

        选择列表提供一组选项进行选择,可以单选也可以多选,标签为select,其内的option标签用来定义选项,如果想多选,主要添加上multiple属性即可

例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="select">
<select v-model="select" multiple>
    <option>Vue</option>
    <option>React</option>
    <option>Node</option>
</select>
<p>{{select}}</p>
</div>
<script>
    var App={
        data(){
            return{
                select:''
            }
        }
    }
    Vue.createApp(App).mount("#select")
</script>
</body>
</html>

图:ctrl键全选

   5.两个常用修饰符

        对表单进行数据绑定时,可以使用修饰符来控制绑定指令的行为,较常用的修饰符有lazy和trim。修饰符lazy的作用类似于属性的懒加载,当数据变化后不会第一时间去同步属性的值,当失去焦点后才同步,修饰符trim作用是将绑定的文本数据到首位空格去掉

代码展示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="test">
    <input v-model.lazy="text">
    <p>懒加载:{{text}}</p>
    <input v-model.trim="text1">
    <p>懒加载:{{text1}}</p>
</div>
<script>
    var App={
        data(){
            return{
                text:"",
                text1:""
            }
        }
    }
    Vue.createApp(App).mount("#test")
</script>
</body>
</html>

效果:


     五.样式绑定

        html可以通过class属性,id属性或标签绑定CSS样式,同样也可以用Vue绑定

1.为HTML标签绑定class属性        

        v-bind指令可以直接对class属性进行数据绑定,但如果绑定的值是一个对象,其就会产生一个新的语法规则,设置的对象中可以指定对应的class样式是否被选用

码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        .red{
            color: red;
        }
        .blue{
            color: blue;
        }
    </style>
</head>
<body>
<div id="test">
    <div :class="{blue:isblue,red:isred}">
        <p>国庆快乐!</p>
    </div>
</div>
<script>
    var App={
        data(){
            return{
              isblue:true,
                isred:false
            }
        }
    }
    Vue.createApp(App).mount("#test")
</script>
</body>
</html>

div元素的class属性会根据isblue和isred的属性值真假来改变,但class绑定的属性不会冲突,如果它们都为true,那就都会添加到class属性中

        也可以使用数组对象控制class属性:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
<!--    <style>-->
<!--        .red{-->
<!--            color: red;-->
<!--        }-->
<!--        .blue{-->
<!--            color: blue;-->
<!--        }-->
<!--    </style>-->
</head>
<body>
<div id="test">
    <div :class="[colorclass,fontclass]">
        <p>国庆快乐!</p>
    </div>
</div>
<script>
    var App={
        data(){
            return{
               colorclass:'blue',
                fontclass:'font'
            }
        }
    }
    Vue.createApp(App).mount("#test")
</script>
</body>
</html>
2.绑定内联样式

        内联样式时指直接通过HTML元素的style属性来设置样式,如将上面代码改动几处;

HTML元素:

<div :style="{color:textcolor,fontSize:textfont}">
        <p>国庆快乐!</p>
    </div>

Vue组件:

 var App={
        data(){
            return{
              textcolor:'blue',
                textfont:'font'
            }
        }
    }
    Vue.createApp(App).mount("#test")

        这样,我们就通过了设置style属性来设置class属性,但需要注意的是,内联设置的CSS和外部定义的CSS有一点区别,外部的多用“-”符号连接,如font-Size,而内联样式常用驼峰命名法,如fontSize


六.实战

        完成一个功能完整的用户注册界面,并通过一些简单的CSS样式构造页面布局

看码:

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        .container{
            margin: 70px auto 0;
            text-align: center;
            width: 300px;
        }
        .subTitle{
            color:gray;
            font-size: 14px;
        }
        .title{
            font-size: 45px;
        }
        .input{
            width: 90%;
        }
        .inputContainer{
            text-align: left;
            margin-bottom: 20px;
        }
        .subContainer{
            text-align: left;
        }
        .field{
            font-size: 14px;
        }
        .input{
            border-radius: 6px;
            height: 25px;
            margin-top: 10px;
            border-color: cornsilk;
        }
        .tip{
            margin-top: 5px;
            font-size: 12px;
            color: gray;
        }
        .setting{
            font-size: 9px;
            color: black;
        }
        .label{
            font-size: 12px;
            margin-left: 5px;
            height: 20px;
            vertical-align: middle;
        }
        .checkbox{
            height: 20px;
            vertical-align: middle;
        }
        .btn{
            border-radius: 10px;
            height: 40px;
            width: 300px;
            margin-top: 30px;
            background-color: deepskyblue;
            border-color: blue;
            color: white;
        }
    </style>
</head>
<body>
<div class="container" id="Application">
    <div class="container">
        <div class="subTitle">加入我们</div>
        <h1 class="title">创建你的账号</h1>
        <div v-for="(item,index) in fields" class="inputContainer">
        <div class="field">{{item.title}}<span v-if="item.required" style="color: #FF0000">*</span></div>
        <input class="input" v-model="item.model" :type="item.type"/>
        <div class="tip" v-if="index===2">请输入大于6位的密码</div>
    </div>
        <div class="subContainer">
            <div class="setting">偏好设置</div>
            <input v-model="receiveMsg" class="checkbox" type="checkbox"><label class="label">接收更新邮件</label>
        </div>
        <button @click="createAccount" class="btn">创建账号</button>
    </div>
</div>
<script>
    const App={
        data(){
            return{
                fields:[
                    {
                        title:" 用户名",
                        required:true,
                        type:"text",
                        model:""
                    },{
                    title:" 邮箱地址",
                        required: false,
                        type: "text",
                        model:""
                    },{
                    title:"密码",
                        required: true,
                        type:"password",
                        model:""
                    }
                ],
                receiveMsg:false
            }
        },
        computed:{
            name:{
                get(){
                    return this.fields[0].model
                },
                set(value){
                    this.fields[0].model=value
                }
            },
            email:{
                get(){
                    return this.fields[1].model
                },
                set(value){
                    this.fields[1].model=value
                }
            },
            password:{
                get(){
                    return this.fields[2].model
                },
                set(value){
                    this.fields[2].model=value
                }
            }
        },
        methods:{
            emailCheck(){
                var verify=/^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/;
                if(!verify.test(this.email)){
                    return false
                }else {
                    return true
                }
            },
            createAccount(){
                if(this.name.length===0){
                    alert("请输入用户名")
                    return
                }else if(this.password.length<=6){
                    alert("密码输入需要大于6位")
                    return
                }else if(this.email.length>0&&!this.emailCheck(this.email)){
                    alert("请输入正确的邮箱")
                    return
                }
                alert("注册成功!")
                console.log('name:${this.name}\npassword:${this.password}\nemail:${this.email}' +
                    '\nreceiveMsg:${this.receiveMsg}')
            }
        }
    }
    Vue.createApp(App).mount("#Application")
</script>
</body>
</html>

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Verilog 教程】7.2 Verilog 文件操作

Verilog 提供了很多可以对文件进行操作的系统任务。经常使用的系统任务主要包括&#xff1a; 文件开、闭&#xff1a;$fopen, $fclose, f e r r o r 文件写入&#xff1a; ferror 文件写入&#xff1a; ferror文件写入&#xff1a;fdisplay, $fwrite, $fstrobe, f m o n i t…

无锡建筑模板厂家:选择适合无锡的建筑模板供应商

无锡作为江苏省的重要城市之一&#xff0c;建筑业发展迅猛&#xff0c;建筑模板作为建筑施工不可或缺的材料备受关注。在选择建筑模板时&#xff0c;考虑到无锡地区的经济状况、气候地形以及建筑风格等因素至关重要。除了常规的建筑模板材料&#xff0c;如建筑清水模板、建筑红…

【Redis】redis的特性和使用场景

Redis的特性 速度快基于键值对的数据结构服务器丰富的功能简单稳定客⼾端语⾔多持久化主从复制⾼可⽤&#xff08;HighAvailability&#xff09;和分布式&#xff08;Distributed&#xff09; 速度快 Redis 执⾏命令的速度⾮常快。 Redis 的所有数据都是存放在内存中的&…

Godot VisualStudio外部编辑器设置

文章目录 前言Godot visual studio 调试添加场景运行结果附加程序监听解决中文报错问题 Godot专栏地址 前言 Godot本质上只是一个游戏引擎&#xff0c;对C#只做了最小的适配&#xff0c;就是能打开&#xff0c;但是不能Debug。Godot支持许多外部编辑器&#xff0c;比如vs code…

MySql8.0 安装和启动

一、开发背景 需要存储数据&#xff0c;快速访问&#xff0c;这里选择 MySql&#xff0c;支持远程访问 二、开发环境 Window10 mysql-8.0.33-win64 三、实现步骤 1、下载压缩包 解压 网上找适合自己的版本&#xff0c;不建议使用32bit&#xff0c;MySql 对 32 bit 支持弱 参…

知识图谱系列3:读论文-《中国鸟类领域知识图谱构建与应用研究》-面向知识图谱的智能服务研究(需求、管理、查询、推理)

5.1鸟类领域知识服务需求研究 本部分根据不同人群&#xff0c;对其需求进行了研究。 并总结需求类型如下。 知识型服务需求指用户学习鸟类相关知识&#xff0c;包括知识内容、知识学习等。知识内容 需求为构建鸟类领域知识库作为知识的来源&#xff1b;知识学习需求为用户通过…

《游戏编程模式》学习笔记(十二)类型对象 Type Object

定义 定义类型对象类和有类型的对象类。每个类型对象实例代表一种不同的逻辑类型。 每种有类型的对象保存对描述它类型的类型对象的引用。 定义往往不是人能看懂的&#xff0c;我们需要例子才能够理解。 举例 假设你要为一款游戏制作一些怪物敌人。这些敌人有不同的血量及攻…

【juc】cyclicbarrier人数凑齐发车

目录 一、截图示例二、代码示例 一、截图示例 二、代码示例 package com.learning.cyclicbarrier;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;/*** …

【代码随想录】LC 209. 长度最小的子数组

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 209. 长度最小的子数组 2、题目…

数据库配置mysql5.7

1 创建数据库 """ 1.管理员连接数据库 mysql -uroot -proot2.创建数据库 create database hello default charsetutf8;3.查看用户 select user,host,password from mysql.user;# 5.7往后的版本 select user,host,authentication_string from mysql.user; "…

云原生开发:构建弹性应用的最新策略

文章目录 云原生开发概述策略一&#xff1a;容器化策略二&#xff1a;微服务架构策略三&#xff1a;自动化策略四&#xff1a;监控和日志记录总结 &#x1f389;欢迎来到云计算技术应用专栏~云原生开发&#xff1a;构建弹性应用的最新策略 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

初级软件测试工程师如何涨薪?

测试进阶方向 说到功能测试进阶方向&#xff0c;这是每个测试从业者都会经历的一个阶段。 个人把测试进阶分为两大类&#xff1a;业务测试 和 技术测试 业务测试&#xff1a; 顾名思义就是对当前从事的业务知识非常熟习&#xff0c;了解产品的显示、隐示需求&#xff0c;测…

Web1.0——Web2.0时代——Web3.0

Web1.0 Web1.0是互联网的早期阶段&#xff0c;也被称为个人电脑时代的互联网。在这个阶段&#xff0c;用户主要通过web浏览器从门户网站单向获取内容&#xff0c;进行浏览和搜索等操作。在这个时代&#xff0c;技术创新主导模式、基于点击流量的盈利共通点、门户合流、明晰的主…

基于springboot实现人职匹配推荐管理系统演示【项目源码+论文说明】分享

基于springboot实现人职匹配推荐管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于人职匹配推荐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了…

Linux友人帐之进程管理

一、基本概念 1、在Liux中&#xff0c;每一个程序都是有自己的一个进程&#xff0c;每一个进程都有一个id号&#xff01; 2、每一个进程呢&#xff0c;都会有一个父进程&#xff01; 3、进程可以有两种存在方式&#xff1a;前台&#xff01;后台运行&#xff01; 4、一般的话服…

企业AI工程化之路:如何实现高效、低成本、高质量的落地?

MLOps工程实践 概述面临挑战目的内容简介读者对象专家推荐目录 写在末尾&#xff1a; 主页传送门&#xff1a;&#x1f4c0; 传送 概述 作为计算机科学的一个重要领域&#xff0c;机器学习也是目前人工智能领域非常活跃的分支之一。机器学习通过分析海量数据、总结规律&#x…

【数据结构】二叉树--顺序结构及实现 (堆)

目录 一 二叉树的顺序结构 二 堆的概念及结构 三 堆的实现 1 包含所有接口 (Heap.h) 2 初始化,销毁和交换&#xff08;Heap.c) 3 向上调整&#xff08;Heap.c) 4 插入&#xff08;Heap.c) ​5 向下调整&#xff08;Heap.c) 6 删除&#xff08;Heap.c) ​7 打印&#…

从零开始:sshd配置与远程登录的快速入门

1.sshd服务介绍 在服务端安装openssh服务 /etc/ssh/sshd_conf # sshd服务的配置文件 端口22 本服务启动后自动生成密钥存储文件 2.ssh参数 2.1.远程登陆 #常用参数 -l #指定登陆用户 -i #指定私钥 -X #开启图形 -f #后台运行 -o #指定连接参数 -t #指定连接跳板ssh userre…

比 N 小的最大质数

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

【进阶C语言】数组笔试题解析

本节内容以刷题为主&#xff0c;大致目录&#xff1a; 1.一维数组 2.字符数组 3.二维数组 学完后&#xff0c;你将对数组有了更全面的认识 在刷关于数组的题目前&#xff0c;我们先认识一下数组名&#xff1a; 数组名的意义&#xff1a;表示数组首元素的地址 但是有两个例外…