ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7.qml-ECMAScript学习(语法、关键字、原始值和引用值)

2021-03-12 19:05:21  阅读:208  来源: 互联网

标签:log console 变量 typeof 运算符 关键字 qml var ECMAScript


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

1.语法

区分大小写

比如:变量 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;

最好的命名方式是:

  • 方法和变量都以小驼峰方式命名
  • 类都以大驼峰方式命名
  • 枚举值之类的以全大写,下划线分割

 

2.ECMAScript 关键字

在ECMAScript中的关键字和C++关键字都类似.不一样的有:

  • new : 创建一个引用对象变量,和C++不一样,由于ECMAScript有垃圾收集器,所以我们释放时只需要置为null,由于没有对象去引用它,就可以让它释放.
  • delete : 只能用来删除对象中开发者定义的属性和方法,而不能删除一个对象.
  • return : 只能写在函数内部

++和--运算符
和C/C++一样,前置++和前置--,都是发生在计算表达式之前.

而后置++和后置--,都是发生在计算表达式之后.

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = --iNum1 + --iNum2; // 1 + 19 等于 20
var iNum4 = iNum1-- + iNum2--; // 1 + 19 等于 20
var iNum5 = iNum1 + iNum2;     // 0 + 18 等于 18

 

取反~、与&、或|、异或^运算、取模运算符
在ECMAScript中, 取反~、与&、或|、异或^、%的运算规则和C++一样.示例如下:

var iNum1 = ~10;    // 10取反然后自减1,等于-11
var iNum2 = 10 & 7; // 1010 & 0111 = 0010 = 2
var iNum3 = 10 | 7; // 1010 | 0111 = 1111 = 15
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");
}

 

3.原始值和引用值
在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值(类似于指针)

原始值 - (可以通过typeof运算符来判断)

存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。

引用值 - (可以通过instanceof运算符来判断)

存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处(只要是new出来的对象都是引用值)

而原始值有5 种类型(可以通过typeof来判断变量的类型):

  • undefined - 如果变量是 Undefined 类型的(未赋初值的变量)
  • boolean - 如果变量是 Boolean 类型的
  • number - 如果变量是 Number 类型的(不管是整数还是浮点数)
  • string - 如果变量是 String 类型的
  • object - 如果变量是一种引用类型或 Null 类型的(用于表示尚未存在的对象)

typeof 运算符
用来判断变量的是什么类型的变量.示例:

var color = "red";
var visible = true;
var num = 25;
var num1 = 025;  // 0开头的数字表示是8进制
var num2 = 0x25; // 0x开头的表示是十六进制
var oTemp;
console.log(typeof color)    // 打印string
console.log(typeof visible) //打印boolean
console.log(typeof num)     //打印number
console.log(typeof oTemp)   // 打印undefined,因为没初始值
console.log(oTemp == null)  // 打印为true

var arr = new Array;
console.log(typeof arr)            // 打印object,如果是引用类型,查看对象类型的话,需要使用instanceof运算符
console.log(arr instanceof Array) // arr引用的类型是Array,所以打印true

尽管null和undefined相等,但是意义不同,比如我们要清理一个对象,那么需要给对象赋值null,而不是undefined

 

instanceof 运算符

instanceof用来判断该对象是否为class的实例,比如下面,判断arr对象是否Array的实例:

var arr = new Array;
console.log(typeof arr)            // 打印object,如果是引用类型,查看对象类型的话,需要使用instanceof运算符
console.log(arr instanceof Array)  // arr引用的类型是Array,所以打印true

 

typeof 运算符和instanceof 运算符
instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是:

  • instanceof 方法要求开发者明确地确认对象为某特定类型。
  • 而typeof则可以直接得出变量类型.

 

未完待续,下章我们来学习 var变量的4种基础类型Undefined 、Boolean 、Number 、String 

标签:log,console,变量,typeof,运算符,关键字,qml,var,ECMAScript
来源: https://www.cnblogs.com/lifexy/p/14525831.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有