《鸿蒙第一行代码》第一课:基本数据类型

88 阅读4分钟
《鸿蒙第一行代码》第一课:基本数据类型

第一课:先来学习TS语言变量的定义
tip: 开发中基本数据类型(小写的number,boolean,string)就够了,基本不用到Boolean,String,Number

还要鸿蒙api12中不能定义any和unknown

直接上学习代码:

/**
 * @author :congge
 * @date : 2024-01-25 18:08
 * @desc : 第一课:先来学习TS语言变量的定义
 *
 * tip:开发中基本数据类型(小写的number,boolean,string)就够了,基本不用到Boolean,String,Number
 * 声明变量都是用基本数据类型
 **/
@Entry
@Component
struct Primitive_data_types_Page {
  @State message: string = '基本数据类型'

   person?: Person ;              // 声明一个person,但是没有初始化

  /**
   * 打开Index界面,先跑的方法,比build()方法还早
   */
  aboutToAppear(){
    /**
     * 定义基本数据类型:any,string,number,boolean,数组类型,元组,undefined,null,联合类型
     */
    // 1、any类型,它可以赋值任何类型,一般我们比较少用,因为代码规范都需要明确的值
    // (注意:在方法中定义变量要加let,类不用加)
    //let data:any // 定义any
    //data = 100 // 赋值number
   // data = 'hello' // 赋值string
    //data.setHello() // 也可以调任何方法,只有在运行时才报错

    // 2、string类型
    // (注意:string是小写的,不要用大写的)
    let dataStr :string
    dataStr = '很高兴认识你'
    dataStr = "哈哈哈" // 字符串可以用单引号也可以用双引号
    //支持字符串模板,用的是`` 就是键盘上ESC下面的一个键
    dataStr = `你是 ${dataStr}`
    // 字符串常用的两个方法
    // indexOf 判断某个字符是否存在,在就返回具体位置,不在就返回-1
    // subSting

    // 3、number类型(整数和小数都用它来定义)
    let dataNum:number
    dataNum = 101
    dataNum = 10.1

    // 4、数组类型
    // (注意:需要先给[]赋值,否则dataArray.push会报错)
    let dataArray:string[] = []  // 这是第一种定义方法
    dataArray.push('你') // 数组赋值
    // 遍历数组
    for(let i = 0; i < dataArray.length; i++) {
      console.log("数组1:"+dataArray[i]) // 这是在打log (点一下右边的Previewer,再点一下就可以看到log了)
    }
    // 一次性赋值多个数据,前面用三个...
    let dataArrayNew:string[] = ['是','那些',"的人"]
    dataArray.push(...dataArrayNew)
    for(let i = 0; i < dataArray.length; i++) {
      console.log("数组11:"+dataArray[i])
    }
    // 截取的意思,截取后是返回一个新的Array,所以dataArrayNew是不等于dateCopy
    let dateCopy = dataArrayNew.slice()
    console.log("数组111:"+(dataArrayNew === dateCopy))
    // 举例
    let arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
    arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
    arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']
    // 在某一位置插入数据
    arr.splice(2, 0, 'H')
    logContent("arr",arr) // 输出的是 ["A","B","H","C","D","E","F","G"]


    // 这是第二种定义方法
    let dataArray2:Array<string> = []
    dataArray2.push('好')
    // 遍历数组
    for(let i = 0; i < dataArray2.length; i++) {
      console.log("数组2:"+dataArray2[i]) // 这是在打log
    }
    // 测试数组是否会越界
    console.log("数组越界1:测试开始")
    // 它不会越界,只是undefined
    console.log("数组越界:"+dataArray2[20])

    /**
     * 5、元组  这玩意有点神奇,之前学的java和kotlin都是没有的
     *
     */
    let dataTuple :[string, number, string] = ["张三", 18, 'guangzou'] // 必须有初始化的值
    dataTuple.push( 18,"李四") // 这里只需要是里面的数据类型即可
    console.log("数组3:长度"+dataTuple.length)
    for(let i = 0; i < dataTuple.length; i++) {
      console.log("数组3:"+dataTuple[i]) // 这是在打log
    }

    // 6、 undefined  声明了一个变量但并没有赋值
    // 鸿蒙api12中不能定义any和unknown
    // let dataUndefined
    // console.log("undefined \t"+dataUndefined)
    // let dataStr2:string
    // console.log("undefined1 \t"+dataStr2)
    // let u: undefined
    // u = 10 //这样会报错的,现实开发中也不会出现这种做法

    // 7、联合类型 xx|xx|xx 用“|”(重点:鸿蒙开发用了大量的联合类型)
    // 比如 fontSize(value: number | string | Resource)
    let dataType : string | number
    dataType = 'nihao'
    dataType = 101


    // 8、差点忘了还有boolean
    let dataBoolean :boolean
    dataBoolean = true

    // 9、它也是有类型推导的,就是定义变量时要给初始值,要定义时就给,后面再给的哇,会被当做是any类型
    let name = "张三"
    //name = 10  //它会报错,因为name已经被推导出是string
    // let nameAny
    // // 不会报错,因为定义变量时没指定类型也没初始化,所以它是any类型
    // nameAny = "李四"
    // nameAny = 100

    // 10、可以用typeof来判断类型,比如下面判断之前定义的dataBoolean是不是boolean类型
    if (typeof dataBoolean === 'boolean') {
      logContent("dataBoolean","是boolean类型")
    }
    //new LetVarDiff().diffThree()


    if(undefined === this.person) {
      logContent("person","person is undefined"); // person is null
    }
    // 三个等号不进,两个等号进
    if(null === this.person) {
      logContent("person","person is null"); // person is null
    }
    if (typeof this.person === 'undefined') {
      logContent("person","person is undefined type");
    }
    // if (typeof person === 'null') {
    //   logContent("person","person is null type");
    // }


  }


  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

class Person {
}
《鸿蒙第一行代码》项目代码结构图:

在这里插入图片描述
有需要项目代码学习的私信我,我每天都看私信的