操作系统:Linux version 4.4.131.D001.64.190906 (YHKYLIN-OS@Kylin)
WPS版本:WPS Office 2019 WPS表格(11.8.2.10533)
js是面向对象弱类型的编程语言,在VBA中熟悉的Integer、Long、Single、Double这些数值类型,在js不需要明确的去声明就可以使用,如果一定要声明,只能是声明为统一的Number对象。
从最大值Number.MAX_SAFE_INTEGER和最小值Number.MIN_SAFE_INTEGER上看,应该和VBA的Double类型是一样的。
Number作为一种对象,就会有相应的属性和方法,这个和VBA的类是一样的概念,在js里使用对象相比VBA里创建类来使用就方便了许多。
Number有2种方法声明,使用new关键字声明:
function testNewNumber() {
var i = new Number(3.1415926)
Debug.Print("type i: " + typeof(i) + " " + i.toString())
Debug.Print("toLocaleString i: " + i.toLocaleString()) // 本地格式字符串
Debug.Print("toFixed i: " + i.toFixed(3)) // 四舍五入
Debug.Print("toExponential i: " + i.toExponential(3)) // 指数计数法
Debug.Print("toPrecision i: " + i.toPrecision(1)) // 超过num位后采用指数计数法
Debug.Print("valueOf i: " + i.valueOf())
Debug.Print("constructor i: " + i.constructor())
}
输出:
type i: object 3.1415926
toLocaleString i: 3.142
toFixed i: 3.142
toExponential i: 3.142e+0
toPrecision i: 3
valueOf i: 3.1415926
constructor i: 0
不使用new:
function testNumber() {
var i = Number(3.1415926)
Debug.Print("type i: " + typeof(i) + " " + i.toString())
Debug.Print("toLocaleString i: " + i.toLocaleString()) // 本地格式字符串
Debug.Print("toFixed i: " + i.toFixed(3)) // 四舍五入
Debug.Print("toExponential i: " + i.toExponential(3)) // 指数计数法
Debug.Print("toPrecision i: " + i.toPrecision(1)) // 超过num位后采用指数计数法
Debug.Print("valueOf i: " + i.valueOf())
Debug.Print("constructor i: " + i.constructor())
}
输出:
type i: number 3.1415926
toLocaleString i: 3.142
toFixed i: 3.142
toExponential i: 3.142e+0
toPrecision i: 3
valueOf i: 3.1415926
constructor i: 0
2种方法都可以调用对象的方法和属性,没有发现什么不同之处!
在VBA里类可以自定义属性和方法,在js中也是一样,Number作为一种对象,也可以自定义属性和方法,使用起来也非常的简单方便:
function testNumberprototype() {
var i = new Number(3.1415926)
Debug.Print("i: " + i.toString())
Number.prototype.double = function() {
return 2 * this
}
i = i.double()
Debug.Print("after double: "+ i.toString())
}
输出:
i: 3.1415926
after double: 6.2831852
另外Number的toString方法可以传入1个参数,按照进制来输出数字,非常的方便:
i = 1000
Debug.Print(" 2进制" + i.toString(2))
Debug.Print("16进制" + i.toString(16))
输出:
2进制1111101000
16进制3e8