《鸿蒙第一行代码》第一课:基本数据类型
第一课:先来学习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 {
}
《鸿蒙第一行代码》项目代码结构图:
有需要项目代码学习的私信我,我每天都看私信的