本文共 4331 字,大约阅读时间需要 14 分钟。
在JS中,数据均为双精度浮点型,范围只能在-()到之间,整型也不例外。数字类型还有三种符号值:+infinity(正无穷)、-infinuty(负无穷)和NaN(not-a-number非数字)。
常量属性:
var biggestNum = Number.MAX_VALUE;var smallestNum = Number.MIN_VALUE;var infiniteNum = Number.POSITIVE_INFINITYvar negInfiniteNum = Number.NEGATIVE_INFINITY;var notANum = Number.NaN;
数字的方法:
内置数学对象Math: Math提供了绝对值、对数指数运算、三角函数运算、最大值、最小值、随机数、开方等运算函数,提供了PI值。
console.log(Math.PI) // 3.141592653589793console.log(Math.abs(-100))console.log(Math.log2(16)) // 4console.log(Math.sqrt(16)) // 4console.log(Math.random()) // 默认为(0, 1)console.log(Math.random(10, 100)) // 测试发现结果仍然是(0, 1)的随机数
+ - * / %等运算符与python一样
console.log(1 / 2) // 0.5自然除,没有向下取整console.log(1 / 0) // 无异常,返回无穷, Infinityconsole.log(5 % 3)console.log(parseInt(1 / 2)) // 0console.log(parseInt(3 / 2)) // 1, 向下取整// 下面三种与python中是一样的,round是四舍六入,五取偶console.log(Math.floor( 3 / 2))console.log(Math.ceil(3 / 2))console.log(Math.round(3 / 2))console.log(Math.round(1 / 2))
++ 和 --:
单目运算符,代表变量自增、自减,i++是先用i,用完之后再自增加1,++i是i先自增加1,在使用i(注意此时i已经加了1),下面是测试代码:
let i = 0let a = i++console.log(a, i) // 0, 1console.log(a, i++) // 0, 1注意i++是先使用再自增,所以打印出1,但是i已经变成2了a = ++i // i已经是2了,在++i, a为3, i为3console.log(a, ++i) // 3, 4注意++i是先自增在使用// 单目运算符优先级高于双目运算符i = 0let b = ++i + i++ + i++ + iconsole.log(b) // 7
>、<、>=、<=没有设么区别,!=、==,!==、===
== 宽松相等,进行类型转换, ==严格相等,不进行类型转换
console.log(100 > '200') // flaseconsole.log(300 > '200') // trueconsole.log(3000 > '2a') // false,有疑问?console.log('3000' > '2000') // true// 宽松比较console.log(300 == '300') // trueconsole.log('200' == '200')// 严格比较console.log( 300 === '300') // falseconsole.log('200' === '200')
从上面的比较中,我们发现比较的时候是隐式转换成数字的,使用宽松比较的时候,尽可能确保比较的类型相同,否则会引起隐式转换,而隐式转换的规则很复杂不好把控,如果不知道类型是否一致,但是就是要求一定要相等的,那么请你使用===和!==。
&&、||、! 与、或、非,这些运算符和其他高级语言一样,都支持短路。
&、|、^、 ~、<<、>> 位与、位或、异或、取反、左移、右移,和python一样。
条件表达式?真值:假值 等价于简单的if ... else结构if (条件表达式){ 表达式为真时执行的语句体}else{ 表达式为假时执行的语句体}
let n = 4 + 5, q = true, c = n > 10 ? '真' : '假'console.log(n)console.log(c) // '假'function test(){ // return 2, n + q, c = n++ return 5, c = n++, n + q // 只能拿到最后的结果11}console.log(test()) // 9,只拿到了最后的值,现在还心存疑虑?让我们在测试一下console.log(c) // 9
console.log('a' instanceof String)console.log(10 instanceof(Number)) // 跟上面的写法不同,但是效果一样w = new String('b')console.log(w instanceof(String)) // trueconsole.log(new Number(20) instanceof Number) // trueconsole.log(w instanceof Object) // true, Object,其中Object是类型,所以O是大写字母console.log(typeof 'w')console.log(typeof('w'))console.log(typeof(w)) // object,留意一下
instanceof 要求必须使用类型定义变量,就是对象必须是new关键字声明创建的,它可以用于继承关系的判断。typeof就是返回对象的类型字符串。
delete删除对象、属性、数组元素:
x = 42var y = 43let z = 60myobj = new Number()myobj.h = 4 // 创建了h属性console.log(delete x)console.log(delete y)console.log(delete myobj.h) // 可以删除用户自己定义的属性,不能删除系统内定义的属性,比如Math.PIconsole.log(delete myobj)console.log('==================')var trees = new Array("reader", 'writer', 'apple', 'banana')for(var i = 0; i < trees.length; i++) // 注意i取不到trees.length console.log(trees[i])console.log('==============')delete trees[2] // 注意数组中的元素被删除,但是空着的位置是undefinedfor(var i = 0; i < trees.length; i++) console.log(trees[i])/**==============*reader*writer*undefined*banana*/
你能使用 delete
删除各种各样的隐式声明, 但是被var
声明的除外
in 判断属性是否在对象内:
let people = new Array('Green', 'KD', 'Curry', 'Klay')console.log(0 in people) // true, 0在数组对象的index中console.log(5 in people) // false 5不在数组对象的index中console.log('Curry' in people) // false 'Curry'是值,不是属性console.log('length' in people) // trueconsole.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')// custom objectslet mycar = { color: 'black', brand: 'Porsche Cayenne', price: '¥1000000'}console.log('color' in mycar) // trueconsole.log('model' in mycar) // falseconsole.log('brand' in mycar) // true
基本表达式和python差不多,解析式也和python的相似,但在ES6中非标准不推荐使用。生成器推荐使用生成器函数,ES6开始支持。
function* inc(){ let i = 0 let j = 7 while(true){ yield i++ if (!j--) return 100 }}let gen = inc()for(let i = 0; i < 10; i++) console.log(gen.next()) /**{ value: 0, done: false }*{ value: 1, done: false }*{ value: 2, done: false }*{ value: 3, done: false }*{ value: 4, done: false }*{ value: 5, done: false }*{ value: 6, done: false }*{ value: 7, done: false }*{ value: 100, done: true }*{ value: undefined, done: true }*/
转载地址:http://kvfvi.baihongyu.com/