ECMAScript 原始类型 忘是亡心i 2022-05-29 01:47 165阅读 0赞 在ECMAScript 中变量可以存放两种类型的值,一种是本篇要说的原始值,另外一种就是引用值。 两者之间的区别可以通过在内存中存放的位置不同来进行区分。原始值一般存放在栈中,而引用值是一个指针,指向存储在堆中的对象。 将变量存放在栈中会提高变量查找和访问的速度。 ECMAScript 中提供了五种原始类型:Undefined,String,Number,Boolean,Null. 在ECMAScript 中可以通过typeof运算符来判断一个值的类型,如若这个值是原始值,该运算符会返回它的类型名字,若为引用值,则会统一返回object作为类型名字。 **typeof运算符** typeof作为运算符,它接收一个参数即要检查的变量或值。 对变量或值调用 typeof 运算符将返回下列值之一: undefined - 如果变量是 Undefined 类型的 boolean - 如果变量是 Boolean 类型的 number - 如果变量是 Number 类型的 string - 如果变量是 String 类型的 object - 如果变量是一种引用类型或 Null 类型的 下面我们看一个简单的实例 Text { function getValues() { var tmp; return tmp; } id:text1; text: typeof(0) + " " + typeof("click") + " " + typeof(false) + " " + typeof(null) + " " + typeof(getValues()); 下面是程序输出结果: ![这里写图片描述][Image 1] **Undefined 类型** Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。 例如: var tmp; 上面的例子也验证了这个结果。 值得一提的是当函数没有明确的返回值时,其返回结果也是undefined。 Text { function getValues() { } id:text1; text: typeof(getValues()); } 另外还有一点就是typeof运算符可以操作为申明的值 。如: Text { id:text1; text: typeof(tmp); } tmp并没有被申明过,但是typeof运算符没有区分这是不是未定义的值,其返回结果仍然是undefined。 **Null 类型** Null类型也只有一个值那就是null。上面提到过undefined值,其实它是从null派生而来,所以两者是等价的。 undefined == null ? "相等" : "不等"; 上面代码比较两者是否相等,输出结果当然是“相等”了。 我们可以显示的将变量初值设为null,然后实现我们特定的逻辑,下面我们看个简单的例子。 Button { id:btn1; property var clickCount: null; text: qsTr("default"); function getClickCount() { if(clickCount == null) { btn1.text= "第一次点击"; clickCount = 1; } else { clickCount++; btn1.text= "已经不是第一次了:" + clickCount; } } onClicked: { getClickCount(); } } 在这里我们定义了一个Button,初始文字设置为default,当我们点击的时候会更改显示文字,并记录点击次数。 运行效果如下: ![这里写图片描述][Image 1] ![这里写图片描述][Image 1] ![这里写图片描述][Image 1] 上面也说过了undefined和null虽然值是相等的,但是两者的含义是不同的。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象。 **Boolean 类型** Boolean 类型是最常用的类型之一,它的值是true或false两者之一。 它的应用场景就不在叙述了,大家都心里有数着了。 **Number 类型** Nubmer类型是ECMAScript中最为特殊的,它既可以表示32位整数,也可以表示64位的浮点数。 你在qml中输入的任何数字都将被视为Number类型的字面量。 定义变量可以参考以下: //整型 console.log(Number(5)); //浮点型 console.log(Number(5.0)); //16进制 console.log(Number(0x1f)); 还有不少学习资料会提到八进制的定义方式,但是我用的是Qt5.10其是不支持八进制格式的。大家可以实际操作一把。 下面主要在提几个常量吧 。 数值的最大值:Number.MAX\_VALUE 数值的最小值:Number.MIN\_VALUE console.log(Number.MAX_VALUE); console.log(Number.MIN_VALUE); 输出: qml: 1.7976931348623157e+308 qml: 5e-324 这两个值仅供参考。 顺便提一下当运算结果大于Number.MAX\_VALUE时,返回结果将是Infinity,代表正无穷大。 console.log(Number.MAX_VALUE * 10); //qml: Infinity 与之对应的当然有负无穷了,-Infinity console.log(-Number.MAX_VALUE * 10); //qml: -Infinity 在程序中可以通过isFinite函数来对数值进行是否为无穷数字的检测; console.log(isFinite(-Number.MAX_VALUE * 10));//qml: false 其返回值为true时代表有穷数字,返回为false时为无穷数字。 还有一个常用的函数isNaN,用来判断是否为非数。使用很简单: console.log(isNaN(100)); console.log(isNaN("100$")); qml: false qml: true 要注意的是千万不要用NaN和自己比较哦。 console.log(NaN == NaN); 你将会得到:qml: false的结果。 [Image 1]:
还没有评论,来说两句吧...