js基础概念-操作符
操作符是操作数据值的符号,也叫做运算符。
按照操作个数分为:一元运算符,二元运算符,三元运算符。
按功能分为:位操作符,布尔操作符,乘性操作符,加性操作符,关系操作符,关系操作符,相等操作符,条件操作符,赋值操作符,逗号操作符。
一元操作符,只能操作一个值的操作符。
1.递增递减操作符,执行前置递增递减的操作符时都是在语句请求前执行的,在计算机科学领域上讲,这种情况通常叫做副效应。
规则:
字符串是有限数字字符转化成数字值在加减1如果不包含有效数字,转换成NaN
浮点型正常转换加减1
布尔型,false将转换成0加减1true相反
对象,先使用valueof()方法,取得一个可操作的值,如果是NaN在使用toString()方法,对象变量变成数值变量。
2,一元加或减操作符
加操作符,放在数值的前面,对大小没有影响。如果是非数值类型,按照上面规则转化。
减操作符,放在数值的后面,数值大小取反。如其他类型,按照规则进行转化。
位操作符
是最基本层次上的,按内存表示数值的位来操作数值。
都是用32位进行操作的,整数以纯二进制格式存储,31位中的每一位都表示2的幂次方,第一是2的0次幂,第二位2的1次幂,以此类推,没用到位用0补充。负数,也是二进制存储,但使用补码。补码分三步,1,求这个数值绝对值的二进制码,例如(求-18的二进制补码,先求18的二进制码)。2,再求二进制反码,就是把所有的0替换成1,所有的1换成0。3,得到的二进制反码在加1。
例如-18的二进制码:
0000 0000 0000 0000 0000 0000 0001 0010
然后求二进制反码,也就是0和1互换
1111 1111 1111 1111 1111 1111 1110 1101
最后在二进制反码加1
1111 1111 1111 1111 1111 1111 1111 1110
但是ECMAscript不会让我看见这些,我们只需要理解这个转换过程就好,在以二进制字符串形式输出负数时,我们看到的还是负数绝对值二进制码前面加一个负号。
1,按位非(NOT)
按位非以一个波浪线(~)表示,就是数值的反码。例如:
var num1 =25; //二进制0000 0000 0000 0000 0000 0000 0000 0001 1001
var num2 =~num; //二进制 1111 1111 1111 1111 1111 1111 1111 1111 1110 0110
alert num2; //-26
也就是操作值的负值减一。
2,按位或(AND)
按位与由一个(&)表示。将两个数值的每一位对齐,如果两个数值都为1,结果为1,其它都为0。
3,按位或(OR)
按位或由一个竖线(丨)表示。也是将两个数值每一位对齐,只有有一个为1,结果就为1,两个都是0的情况下才返回0。
4,按位异或(XOR)
由(^)表示,只有一个1才返回1。
5,左移
由(<<)表示,会将所有数值的所有位向左移动指定的位数。以0补充移动的位数。
6,有符号的右移
由(>>)表示,会将所有数值的所有位向右移动指定的位数。以隐藏的符号位填充空白的位数。
7,无符号右移
由(>>>)表示,和有符号右移一样,但是以0填充空位,而且无符号二进制码当成正数二进制码,负数以其绝对值的二进制码补码形式表示,因此导致无符号右移后结果非常大。
布尔操作符
有3个:非(NOT),与(AND),或(OR)。
1,逻辑非(!)表示,将它操作数转换成布尔值,然后取反。
{对象返回false;空字符串返回true;非空返回false;操作数的数值位0返回true;任何非0返回false;null返回true;NaN返回true;Undefined返回true。}
也就是将一个值转换成布尔值,然后对其取反。
2,逻辑与(&&)
属于短路操作,即如果有一个操作数决定结果,就不会对第二个操作数求值。如果第一个位false,无论第二个为什么值,结果都不可能为true。
3,逻辑或(||)
只有有一个满足条件为true ,就返回为true那个为操作数。
乘性操作符
定义了3个乘性操作符:乘法,除法和求模。
1,乘法(*)表示计算连个数乘积。和数学中乘法一样,要是超出范围,返回Infinity或-Infinity
2,除法(/)第二个数除以第一个数。
3,求模(余数)由(%)表示。
加性操作符
1,加法(+)都是数值正常加法运算,如果:都是字符串,将两拼接起来。如一个是数值,一个是字符串,将数值转换成字符串,然后字符串拼接。如果有一个操作数是对象,数值或布尔值,调用toString()方法。对于underfined和null调用String()函数取得相应的字符串。
*可以运用括号告诉浏览器那个先执行。
2,减法(-)和加法类似。
关系运算符
大于(>)小于(<)大于等于(>=)小于等于(<=)
比较规则如下:
如都是数值,执行数值比较。
如两个操作符都是字符串时,则比较两个字符串对应的字符编码值。
如一个是数值,则另一个操作数转换成一个数值,然后执行数值比较。
如一个操作数是对象,则调用这个对象的valueOf()方法,如果对象没有这个方法用toString()方法,在根据上面规则比较。
如一个是布尔值,将其转换成数值在比较。
任何与NaN进行比较都是false。
相等操作符
1,相等(==)如果相等返回true。不相等(!=)成立返回true,转换规则同上,不同的是null和underfine相等。
2,全等(===),不全等(!==)在不转换类型的情况下比较。
条件操作符
说白了就是if()else{}语句,也叫三元操作符。
例如:var max =(num1 > num2) ? num1 :num2;
就是说如果前面为true取num1赋给max,false取num2赋给max。
赋值操作符
由(=)表示,也就是二元操作符,就是把右侧的值赋给左边
逗号操作符
在一条语句中执行多个操作,
用于声明多个变量。例如:var num1 =1,num2=2,num3=3;
用于赋值,只会返回最后一项。例如:var num =(5,1,4,8,0);//num的值为0。
js基础概念-操作符的更多相关文章
- JS基础概念
JS基础概念 1. 算法及流程图 算法类型:1.算数算法:2.事务性算法(解决某个问题的方法和先后顺序). JS语法概述 1. 引入JS的方法 1.用<script src="&quo ...
- js 基础概念
一 执行上下文 和 执行上下文栈 执行上下文:一段javascript代码执行前的准备工作 问题一:js引擎遇到怎样一段代码才会做"准备工作呢"? 可执行代码类型:全局代码.函数代 ...
- JavaScript--我发现,原来你是这样的JS(基础概念--躯壳,不妨从中文角度看js)
介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第二篇(基础概念--躯壳篇),有着部分第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的, ...
- JavaScript--我发现,原来你是这样的JS(基础概念--灵魂篇,一起来学js吧)
介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第三篇(灵魂篇介绍),有着剩下的第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂 ...
- JS--我发现,原来你是这样的JS(三)(基础概念--灵魂篇)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第三篇(灵魂篇介绍),有着剩下的第三章的知识内容. 红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂更不容易,要熟练js ...
- JS--我发现,原来你是这样的JS(二)(基础概念--躯壳篇--不妨从中文角度看js)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第二篇(基础概念--躯壳篇),有着部分第三章的知识内容,当然其中还有我个人的理解. 红宝书这本书可以说是难啃的,要看完不容易,挺 ...
- JS 的基础概念
本篇文章主要讲述js的基础知识! 首先,我们要明白什么是JS,JS就是 javascript 的简称,是一种轻量级,弱类型的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能, ...
- 【C#基础概念】操作符
------------恢复内容开始------------ 一.操作符概览 1.概念 操作符(Operator)也称"运算符" 操作数:是用来操作数据的,被操作符操作的数据称为操 ...
- JavaScript随笔记(一)基础概念以及变量类型
一.JavaScript中的基础概念 1.defer属性 一般我们在引用外部js文件的时候往往是将引用文件的位置放在标签当中,比如那么在标签中引入多个js文件时,浏览器会按照引入顺序加载执行这些引入的 ...
随机推荐
- Guitar Pro里的编谱方式怎么用?
今天来教大家如何使用Guitar Pro中的编谱方式来让我们的乐谱更加美观整齐耐看,我们一起get起来吧! 相信我们每一个人在使用Guitar Pro进行编曲创作时,都会碰到这种情况,在乐谱上,会看到 ...
- Cmd Markdown 编辑阅读器
我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录思想和分享知识提供更专业的工具. 您可以使用 Cmd ...
- spark生成大宽表的parquet性能优化
1. 背景介绍 将一份数据量很大的用户属性文件解析成结构化的数据供查询框架查询剖析,其中用户属性包含用户标识,平台类型,性别,年龄,学历,兴趣爱好,购物倾向等等,大概共有七百个左右的标签属性.为了查 ...
- Redis学习--key的通用操作、移库操作、订阅与事务、持久化和总结
key的通用操作 keys pattern: pattern *表示任意一个多个字符 ?表示任意一个字符 del key1 key2 删除多个key exists keyname 查看是否存在 ren ...
- stimulus(6300✨)
https://github.com/stimulusjs/stimulus 一个现代JS框架,不会完全占据你的前端,事实上它不涉及渲染HTML. 相反,它被设计用于增加你的HTML和刚刚够好的beh ...
- gunicorn flask nginx环境配置
防火墙端口设置****修改后要重启生效(有时在控制面板中设置80端口无法生效) /etc/init.d/iptables statusservice iptables stopfirewall-cmd ...
- vue 上拉加载自定义组件,超好用哦
1.创建组件components > zj-roll > index.vue <template> <div> <slot></slot> ...
- Opencv-Android安装使用
这是本人第一篇博客,写博客并不是说本人的技术能力有多强,或者说炫耀自己取得的进展.在当今这个数据信息大爆炸的年代,每个人肯定会接受很多新鲜事物,但不是所有东西你都能记得一清二楚,写博客一方面是为了巩固 ...
- VUE + vue-cli + webpack 创建新项目
首先记录一下命令. 这是一个睿智新手的笔记. p.s.这是配置好环境以后的命令. ----------------------------------------------- $ npm insta ...
- zzw原_环境变量导致date命令显示处理一例
1.显示时间看不懂 [root@localhost ~]# date201790:02:06 CST 2.注释掉环境变量bash_profile的两行配置 [root@localhost ~]# vi ...