QML语法有三个核心:
- ECMAScript
- Qt对象系统
- Qt Quick标准库
所以ECMAScript非常重要,本章主要总结ECMAScript用法
ECMAScript语法参考链接:https://www.w3school.com.cn/js/pro_js_syntax.asp
ECMAScript内置对象参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects
- 语法
区分大小写
比如:变量 test 与变量 TEST 是不同的。
变量是弱类型的
定义变量时只能用 var 运算符,而不是String、int、bool之类的.初始化的时候可以赋为任意值,也可以随意改变变量所存储的数据类型(尽量避免这样做).比如:
var color = "red";
var num = 25;
var visible = true;
console.log(num)
num = "123" // 将int类型转为bool类型,不建议这样更改, 好的编码习惯是始终存放相同类型的值
console.log(num)
每行结尾的分号可有可无
最好还是加上分号,与C 代码保持一致,保持良好编码习惯
注释与 Java、C 和 PHP 语言的注释相同
比如:
// this is a single-line comment
/*
* this is a multi-line comment
*/
括号表示代码块
在左括号({)和右括号(})之间被称为代码块.
声明变量
可以用var 语句来定义多个变量:
var test1 = "hi", test2 = "hello", age = 25;
命名变量
变量名需要遵守两条简单的规则:
- 第一个字符必须是字母、下划线(_)或美元符号($)
- 余下的字符可以是下划线、美元符号或任何字母或数字字符
下面的变量都是合法的:
var test;
var $test;
var $1;
var _$te$t2;
最好的命名方式是:
方法和变量都以小驼峰方式命名
类都以大驼峰方式命名
枚举值之类的以全大写,下划线分割
ECMAScript 关键字
下面是 ECMAScript 关键字的完整列表:
break
case
catch
continue
default
delete : 用来删除对象中开发者定义的属性和方法
do
else
finally
for
function
if
in
instanceof
new : 创建一个引用对象变量
return
switch
this
throw
try
typeof
var
void
while
with
ECMAScript 保留字
保留字在某种意思上是为将来的关键字而保留的单词。因此保留字不能被用作变量名或函数名
abstract
boolean
byte
char
class
const
debugger
double
enum
export
extends
final
float
goto
implements
import
int
interface
long
native
package
private
protected
public
short
static
super
synchronized
throws
transient
volatile
和--运算符
和C/C 一样,前置 和前置--,都是发生在计算表达式之前.
而后置 和后置--,都是发生在计算表达式之后.
代码语言:javascript复制var iNum1 = 2;
代码语言:javascript复制 var iNum2 = 20;
代码语言:javascript复制 var iNum3 = --iNum1 --iNum2; // 1 19 等于 20
代码语言:javascript复制 var iNum4 = iNum1-- iNum2--; // 1 19 等于 20
var iNum5 = iNum1 iNum2; // 0 18 等于 18
取反~、与&、或|、异或^运算、取模运算符
在ECMAScript中, 取反~、与&、或|、异或^、%的运算规则和C 一样.示例如下:
代码语言:javascript复制var iNum1 = ~10; // 10取反然后自减1,等于-11
代码语言:javascript复制 var iNum2 = 10 & 7; // 1010 & 0111 = 0010 = 2
代码语言:javascript复制 var iNum3 = 10 | 7; // 1010 | 0111 = 1111 = 15
代码语言:javascript复制 var iNum4 = 10 ^ 7; // 1010 ^ 0111 = 相同为0,相异则或 = 1101 =13
var iResult = 26%5; //等于 1
for-in 语句
for-in 语句,不仅可以打印出对象里的属性和方法,还可以打印数组的内容
示例如下:
for(var i in data) {
... ...
}
switch语句
在 ECMAScript 中,switch 语句可以用于字符串,而且case语句能用变量值.非常灵巧,示例如下所示:
var BLUE = "blue", RED = "red", GREEN = "green";
switch (sColor) {
case BLUE: console.log("Blue");
break;
case RED: console.log("Red");
break;
case GREEN: console.log("Green");
break;
default: console.log("Other");
}
原始值和引用值
在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值(类似于指针)
原始值
存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
引用值
存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。
而原始值有5 种类型(可以通过typeof来判断变量的类型):
- undefined - 如果变量是 Undefined 类型的(未赋初值的变量)
- boolean - 如果变量是 Boolean 类型的
- number - 如果变量是 Number 类型的(不管是整数还是浮点数)
- string - 如果变量是 String 类型的
- object - 如果变量是一种引用类型或 Null 类型的(用于表示尚未存在的对象)
typeof 运算符
用来判断变量的是什么类型的变量.示例:
代码语言:javascript复制var color = "red";
代码语言:javascript复制var visible = true;
代码语言:javascript复制var num = 25;
代码语言:javascript复制var num1 = 025; // 0开头的数字表示是8进制
代码语言:javascript复制var num2 = 0x25; // 0x开头的表示是十六进制
代码语言:javascript复制var oTemp;
代码语言:javascript复制console.log(typeof color) // 打印string
代码语言:javascript复制console.log(typeof visible) //打印boolean
代码语言:javascript复制console.log(typeof num) //打印number
代码语言:javascript复制console.log(typeof oTemp) // 打印undefined,因为没初始值
代码语言:javascript复制console.log(oTemp == null) // 打印为true
代码语言:javascript复制
代码语言:javascript复制var arr = new Array;
代码语言:javascript复制console.log(typeof arr) // 打印object,如果是引用类型,查看对象类型的话,需要使用instanceof运算符
代码语言:javascript复制console.log(arr instanceof Array) // arr引用的类型是Array,所以打印true
代码语言:javascript复制尽管null和undefined相等,但是意义不同,比如我们要清理一个对象,那么需要给对象赋值null,而不是undefined
代码语言:javascript复制
代码语言:javascript复制
typeof 运算符和instanceof 运算符
instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是:
l instanceof 方法要求开发者明确地确认对象为某特定类型。
l 而typeof则可以直接得出变量类型.
Number 类型
代码语言:javascript复制要定义浮点值,必须包括小数点和小数点后的一位数字(例如1.0)。这被看作浮点数字面量。
代码语言:javascript复制对于非常大或非常小的数,可以用科学计数法表示浮点数.例如:
var fNum1 = 5.618e7 // 5.618 x 107
var fNum2 = 8-e17 // 0.00000000000000008
Number提供的几个特殊值
Number.MAX_VALUE : 定义了数值最大值,值为1.7976931348623157e 308
Number. MIN_VALUE : 定义了数值最小值,值为5e-324
Number.POSITIVE_INFINITY: 无穷大,值为Infinity
Number.NEGATIVE_INFINITY: 无穷小,值为-Infinity
并且提供了2个方法判断Number是否有效
isFinite(number) : number如果是无穷的,则返回false,有穷则返回true
isNaN(val) : 判断val是否非数字,返回true,则表示非数字
示例如下:
代码语言:javascript复制 var maxValue = Number.MAX_VALUE;
代码语言:javascript复制 var minValue = Number.MIN_VALUE;
代码语言:javascript复制 console.log(maxValue) // 1.7976931348623157e 308
代码语言:javascript复制 console.log(minValue) // 5e-324
代码语言:javascript复制 console.log(Number.POSITIVE_INFINITY) // Infinity
代码语言:javascript复制 console.log(Number.NEGATIVE_INFINITY) // -Infinity
代码语言:javascript复制
代码语言:javascript复制 if (isFinite(10000)) {
代码语言:javascript复制 console.log("10000 = 有穷数") // 10000 = 有穷数
代码语言:javascript复制 }
代码语言:javascript复制 var value = maxValue * maxValue;
代码语言:javascript复制 if (!isFinite(value)) {
代码语言:javascript复制 console.log("maxValue * maxValue = 无穷的数") // maxValue * maxValue = 无穷的数
代码语言:javascript复制 }
代码语言:javascript复制 var value2 = "0.0.1324";
代码语言:javascript复制 console.log( isNaN("blue")) // true
代码语言:javascript复制 console.log( isNaN(value2)) // true
代码语言:javascript复制 console.log( isNaN("666")) // false
代码语言:javascript复制 console.log( isNaN(1000)) // false
String 类型
在ECMAScript中,单引号和双引号一样,都可以用来字符串或者字符上,比如:
var sColor1 = "red";
var sColor2 = 'red';
n | 换行 |
---|---|
t | 制表符 |
b | 空格 |
r | 回车 |
f | 换页符 |
\ | 反斜杠 |
' | 单引号 |
" | 双引号 |