博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从无到有的学习JavaScript——第二篇(运算符)
阅读量:4130 次
发布时间:2019-05-25

本文共 4331 字,大约阅读时间需要 14 分钟。

1. 数值型

在JS中,数据均为双精度浮点型,范围只能在-(2^{53} - 1)到2^{53} - 1之间,整型也不例外。数字类型还有三种符号值:+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)的随机数

2. 运算符

2.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

2.2 比较运算符

>、<、>=、<=没有设么区别,!=、==,!==、===

== 宽松相等,进行类型转换, ==严格相等,不进行类型转换

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')

从上面的比较中,我们发现比较的时候是隐式转换成数字的,使用宽松比较的时候,尽可能确保比较的类型相同,否则会引起隐式转换,而隐式转换的规则很复杂不好把控,如果不知道类型是否一致,但是就是要求一定要相等的,那么请你使用===和!==。

 

2.3 比较运算符

&&、||、! 与、或、非,这些运算符和其他高级语言一样,都支持短路。

2.4 位运算符

&、|、^、 ~、<<、>> 位与、位或、异或、取反、左移、右移,和python一样。

2.5 三元运算符

条件表达式?真值:假值 等价于简单的if ... else结构if (条件表达式){    表达式为真时执行的语句体}else{    表达式为假时执行的语句体}

2.6 逗号操作符

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

2.7 其他

 

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

3. 表达式

基本表达式和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/

你可能感兴趣的文章
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
25个构建Web项目的HTML建议,你需要了解一下!
查看>>
【web素材】02-10款大气的购物商城网站模板
查看>>
6种方式实现JavaScript数组扁平化(flat)方法的总结
查看>>
如何实现a===1 && a===2 && a===3返回true?
查看>>
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
12 个JavaScript 特性技巧你可能从未使用过
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(上)
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
8种ES6中扩展运算符的用法
查看>>
【视频教程】Javascript ES6 教程28—ES6 Promise 实例应用
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>