【预】Qt Quick编程(1)——QML的核心部分ECMAScript

原文地址:http://www.cnblogs.com/lxmwb/p/6291220.html
说道QML,不得不先说一下ECMAScript:

ECMAScript语言的标准是由Netscape、Sun、微软、Borland等公司基于JavaScript和JScript锤炼、定义出来的。

ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。它描述了一下内容:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 运算符
  • 对象

其他语言可以以它为基础拓展出新特性,比如QML引入了Qt对象系统中的信号与槽等特色功能。

QML有三个核心:
- ECMAScript
- Qt对象系统
- Qt Quick标准库

所以说学号QML,了解ECMAScript必不可少。在开始了解ECMAScript的基本特性之前,要知道qmlscene可以加载QML文档以达到测试的目的,比如如下测试代码,就可以在Qt命令行界面中以“qmlscene text.qml”的方式显示界面效果:

/*
 * text.qml
 */
import QtQuick 2.2
Rectangle {
    Component.onCompleted: {
        // 这里放测试代码
    }
}

1.语法

与C、C++或者Java类似。如果你有这几种语言的基础,那学习ECMAScript简直就是“张飞吃豆芽,小菜一碟”。需要注意的几点是:
  • 区分大小写
    知道变量area和Area不一样就行了,无需多言。

  • 弱类型
    ECMAScript语言是弱类型语言,变量没有特定的类型,在定义变量的时候都用var定义,可以用任意值初始化变量,而且可以随时改变变量所存储的数据类型,当然了,最好是不要这么做。

  • 分号可写可不写
    ECMAScript中,如果没有以分号结尾,它就会把本行的末尾当做是该语句的结束。之后需要QML与C++混合编程,为了不思想分裂,故而还是与c++风格保持一致的好啊,你说是也不是。

2.变量

与c++中变量声明以及定义是类似的,这里不必多言。在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值。原始值一般存放在栈上,引用值是一个指针,指向存储在堆中的对象,如果你熟悉c++的话,那么很容易就能理解这个概念。

3.原始类型

在ECMAScript中,原始类型有5种:

  • Undefined
  • Null
  • Boolean
  • Number
  • String

typeof运算符可以判断一个值的类型,是原始类型会返回类型的名字,是引用类型则统一返回“object”作为类型名字。以下为简单的示例:

/*
 * typeof value
 */
 import QtQuick 2.2
Rectangle {
    Component.onCompleted: {
        var name = "matao";
        console.log(typeof name);
        console.log(typeof 60);
    }
}

Undefined类型和Null类型都只有一个值,即undefined、null。

数字类型的最大值是Number.MAX_VALUE,最小值是Number.MIN_VALUE,它们定义了Number值的外边界,所有的ECMAScript数都必须在这两个值之间。不过,由表达式的值可以不落在这两个数之间。大于最大值,它将被赋值为Number.POSITIVE_INFINITY,即正无穷大;当生成的数值小于Number.MIN_VALUE时,将被赋值为Number.NEGATIVE_INFINITY,即负无穷大。其实,ECMAScript也有专门表示无穷大的值,即Infinity,而-Infinity表示负无穷大。

isFinit()方法可以判断一个数是否是又穷的。

还有一个特殊值NaN,表示非数。isNaN判断一个数是否是非数。

4.类型转换

  • toString()
    Boolean、Number、String三种原始类型,都有toString()方法,可以把它们的值变为字符串;
  • parseInt()和parseFloat()
    这两种方法只适用于String类型,而且只转换无效字符之前的部分,见如下示例:

    parseInt(“2014年”); //2014
    parseInt(“3.14”); //3
    parseFloat(“3.13.1”); //3.13
    parseInt(“INGI”); //NaN

  • 强制类型转换

    • Boolean(value)
      value是非空字符串、非0数字或对象时,Boolean()返回true;
      value是空字符串、0、undefined或null,Boolean()返回false;
    • Number(value)
      Number()转换的是整个值! 这是与parseInt()和parseFloat()不同的地方。
    • String(value)
      它与调用tostring()方法的唯一不同在于:对null或undefined值强制类型转换可以生成字符串而不发生错误:
        var null2String = String(null);         // “null”
        var oNull = null
        var s2 = oNull.toString();               // error

5.对象

首先声明,其实在ECMAScript中并没有“类”这个词,与其对应的是“对象定义”,这里的“类”代指的就是这个意思,区别于C++、Java中的类。前面提到的引用值,指向的就是对象。

对象是由new运算符加上要实例化的类型的名字创建的。比如:

var a = new Array();

了解更多,请转到个人博客查看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值