QML提供的JavaScript主机环境可以运行有效的标准JavaScript构造,如条件操作符、数组、变量设置、循环。除了标准的JavaScript属性之外,QML全局对象还包含许多帮助方法,这些方法可以简化构建ui并与QML环境进行交互。本篇文章将介绍一些JavaScript的基础语法。
1. JavaScript的语法
(1) 区分大小写
同C++一样,JavaScript是区分大小写的,也就是说Number和number是两个不同的变量。
(2) 弱类型
与Python相同,JavaScript是弱类型的即变量没有特定的类型。与Python不同,声明变量时需要在前面加上关键字var, 下面是一个简单的示例:
var number = 10
console.log(number)
number = 'Hello JavaScript'
console.log(number)
程序的输出结果为:
qml: 10
qml: Hello JavaScript
(3) 断行
多条语句写在同一行,需要使用分号(;)分隔,不同行可以不使用分号分隔,当然也可以加上分号都行。
var i = 10; var j = 20; var k = 30;
var number = 50;
var numberStr = 'Number is 50'
(4) 注释
JavaScript中的注释同C++相同,单行注释使用(//), 多行注释使用(/**/)
// 这个是单行注释
var i = 20
/*这个是多行注释
Hello JavaScript
*/
var str = 'Hello JavaScript'
(5) 代码块
同C++相同,代码块使用大括号({…})之间。
function func() {
console.log('Hello JavaScript')
}
func()
2. 变量
(1) 变量的声明
前面讲过,声明变量的时候需要在前面加上var关键字
var number1 = 10; var number = 20;
var str1 = 'Hello World' // 使用单引号,表示字符串
var str2 = "Hello JavaScript" // 使用双引号,表示字符串
(2) 变量的命名规则
变量的命名遵循如下两个规则:
- 首字母必须是字母、下划线(_)或美元符号($)
- 余下的字符可以是字母、数字、下划线(_)或美元符号($)
var number1 = 20
var $number = 30
var _number = 40
3. 数据类型
(1) Undefined类型
Undefined类型只有一个值,即undefined。当声明的变量未初始化时,该变量的默认值为undefined。
var number
console.log(number, typeof number)
typeof运算符可以检查变量的类型,下面为typeof返回值对应的数据类型
- undefined, 变量为Undefined
- boolean, 变量为Boolean
- number, 变量为Number
- string, 变量为String
- object, 变量为引用类型或Nill类型
输出结果为:
qml: undefined undefined
(2) Null类型
Null类型也只有一个值,即null
可以将一个变量设置为null类型,然后据此实现一些逻辑。
(3) Boolean类型
Boolean类型有两个值,true和false
(4) Number类型
无论是整数还是浮点数,都属于Number类型。
- 表示十六进制数时需要在数字前面加上0x, 如0xAA
- 表示八进制数时需要在数字前面加上0, 如044
- 可以使用科学计数法表示浮点数,如3.14e8
- 数字类型最大值使用Number.MAX_VALUE表示,最小值使用Number.MIN_VALUE表示
- 当计算的值大于最大值时,它被赋值为Number.POSITIVE_INFINITY,即正无穷。
- 当生成的值小于最小值时,它被赋值为Number.NEGATIVE_INFINITY, 即负无穷。
- JavaScript中使用Infinity和-Infinity表示无穷,他们分别和Number.POSITIVE_INFINITY、Number.NEGATIVE_INFINITY相对应。
- 使用isFinite()方法判断是否为有穷的。
- NaN表示非数,即not a number, 可以使用isNaN()方法判断是否为NaN类型
var number1 = 10
var number2 = 10e2
var number3 = Infinity
var number4 = 'Hello JavaScript'
console.log(number1, number2, number3)
console.log(isFinite(number3), isNaN(number4))
运行结果:
qml: 10 1000 Infinity
qml: false true
(5) String类型
- 字符串字面量使用单引号(‘)或双引号(“)包围来声明
- 可以使用转义字符’\n’,‘\\’等
- 使用’\0nnn’表示八进制数,‘\xnn’表示十六进制数,‘\unnnn‘表示Unicode字符。
4. 类型转换
- Boolean、Number、String都有toString()方法可以将他们的值转为字符串类型。
- parseInt()方法可以转成Int类型,parseFloat()可以转换为float类型的数字
- 这两个函数只能用于String类型,负责返回NaN
- 这两个类型会扫描字符串知道遇到第一个非数字字符时停止,返回转换结果。如parseInt(‘2018年’)返回值为2018,parseFloat(‘3.14.15’)返回值为3.14,parseInt(Hello)返回值为NaN
- Boolean(), 强制类型转换为Boolean类型。空字符串、数字0、undefined和null返回false.其他的返回值为true。
- Number()强制转换为Number类型。与函数parseInt()和parseFloat()不同,它转换的为整个值,即Number(‘2018年’)返回值为NaN
- String()可以转换为String类型。与toString()不同,它可以转换undefined类型和null类型转换为字符串
var number = '2018年'
var number2 = '3.14.15'
var number3 = null
console.log(parseInt(number), parseFloat(number2))
console.log(parseInt(number).toString(), parseFloat(number2).toString())
console.log(Boolean(number3))
console.log(Number(number))
console.log(String(number3))
运行结果:
qml: 2018 3.14
qml: 2018 3.14
qml: false
qml: NaN
qml: null