首页编程java编程javascript运算符优先级 js位运算符怎么运算

javascript运算符优先级 js位运算符怎么运算

编程之家2026-05-24684次浏览

本篇文章给大家谈谈javascript运算符优先级,以及js位运算符怎么运算对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

javascript运算符优先级 js位运算符怎么运算

javascript 变量的大小用什么关键字

JavaScript语言有以下特点:

(1) JavaScript语言的语法类似于C语言和Java语言。

(2) JavaScript程序由客户端的浏览器解释执行。

(3) JavaScript中,字母区分大小写。

由于JavaScript是解释执行的,所以它的语法远不如C语言等严格,如果程序中有错误,浏览器会忽略错误的部分,而不是停止执行。

JavaScript程序是在客户端执行的,它不能操纵服务器中的数据库,所以包含了JavaScript的网页仍是静态网页。

javascript运算符优先级 js位运算符怎么运算

整型常量:

以 0开头的是八进制数,如 065。

以 0x开头的是十六进制数,如 0x3f4a。

其它为十进制数,如 35,-70。

浮点常量:

如 12.8、-0.65、1.2e-7。

javascript运算符优先级 js位运算符怎么运算

布尔常量:

有 true和 false两个。

字符串常量:

如:"OK"、"a"、"欢迎光临"。

注:JavaScript中的字符串可以用双引号分界,也可用单引号分界。如果串中含有一种引号,需用另一种引号分界。

转义字符:

如:\n代表换行,\r代表回车,\t代表Tab符,\"代表双引号,\'代表单引号。

它们一般用于字符串之中。

undefined:

代表未定义的值。它不能用于计算,如果引用了一个不存在的变量,或没有赋值的变量时,输出此值。

null:

代表空值。它不能用于计算,但可以用它为变量赋值,来清空变量中原有的值。

说明:在JavaScript中没有其它语言中常见的字符型量,需要用字符串代替。

JavaScript的数据类型可分为两大类:原始类型、引用类型。原始类型变量的值存放在栈中,访问变量时可直接访问到变量的值。引用类型变量在栈中存放的是指针,其值另外存放在堆中,需要通过指针才能访问。

原始类型:包括 Undefined、Null、Boolean、Number、String五种。

Undefined类型:值为 undefined,代表一个未定义的量。

Null类型:值为 null,一般用作占位符,表示一个尚不存在的对象。

Boolean类型:值为 false或 true,一般用于条件表达式中。

Number类型:值为数字,可进行数值计算。

String类型:值为字符串,可进行字符串处理。

引用类型:所有对象都是引用类型。包括 Boolean、Number、String、Array、Date、Math等。

其中,Boolean、Number、String既可以是原始类型,也可以是引用类型。

引用类型的变量除了可以访问变量的值以外,还提供了若干属性和方法。

JavaScript中的变量声明用关键字 var引导,变量的类型取决于它的声明方式。

声明原始类型的变量:

var变量名=值;

例如:

var x;

var b= true;

var k= 20;

var s="abc";

变量 x没有指定值,它的值默认为 undefined,变量 b为 Boolean型,变量 k为 Number型,变量 s为 String型。

声明引用类型的变量:

var变量名= new类型名(初值);

例如:

var bb= new Boolean(false);

var str= new String("Hello");

var arr= new Array("red","yellow","blue");

变量 bb是 Boolean对象,变量 str是 String对象,变量 arr是 Array对象。

JavaScript的变量是弱类型的,变量的类型主要取决于它的值,你可以随时更改它的类型。

例如:

var i;

i= 20;

i="red";

声明时变量 i是 Undefined类型,赋值一个整数后,它成为 Number类型,赋值为字符串后,又成为 String类型。

JavaScript中的运算符和C语言基本相同,优先级也相同。

算术运算符:+(加)、-(减)、*(乘)、/(除)、%(取模)、++(增量)、--(减量)、-(取负)。

逻辑运算符:&&(与)、||(或)、!(非)。

比较运算符:>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)、!=(不等于)、===(严格相等)、!==(不严格相等)。

注:“相等”只要求值相等,“严格相等”要求值相等且类型相同。如:1=="1"是 true,而 1==="1"是 false。

位运算符:&(位与)、|(位或)、^(位异或)、~(按位取反)、<<(左移)、>>(右移)、>>>(填0右移)。

赋值运算符:=(赋值)、op=(运算赋值)。

注:运算赋值中的运算符可以是算术运算符或位运算符。如:“x+=10”表示“x=x+10”。

条件运算符:条件?表达式1:表达式2

注:若条件为 true,值为表达式1的值,否则为表达式2的值。

字符串连接运算符:+、+=。

如:"every"+"one"的结果为"everyone"。

注:连接的项目中可以包括字符串、常量、变量,不需要都是字符串,只要项目中有一个是字符串就会按字符串进行连接。

如:"ex"+20+"b"的结果为"ex20b"。

new运算符:

用于创建一个对象。如:new Array()表示生成一个数组对象。

delete运算符:

用于删除一个对象。

JavaScript语句用“;”分界,但没有分号也可以正常使用,不过应该养成书写分号的习惯。

表达式语句:

x=1;

x++;

条件语句:if…… else……

if( x>0)

k="A";

else

k="B";

多路分支语句:switch…… case……

switch( a)

{

case 1: x="A"; break;

case 2: x="B"; break;

case 3: x="C"; break;

default: x="D";

}

循环语句:while

while( x<5)

{

y+= x;

x++;

}

循环语句:do…… while

do

{

y+= x;

x++;

}while( x<5);

循环语句:for

for( i=1; i<=10; i++)

{

x+= 2;

}

退出循环:break、continue

break语句可退出循环语句或 switch语句。

continue语句可结束本次循环,并开始下一次循环。

JavaScript语句用“;”分界,但没有分号也可以正常使用,不过应该养成书写分号的习惯。

表达式语句:

x=1;

x++;

条件语句:if…… else……

if( x>0)

k="A";

else

k="B";

多路分支语句:switch…… case……

switch( a)

{

case 1: x="A"; break;

case 2: x="B"; break;

case 3: x="C"; break;

default: x="D";

}

循环语句:while

while( x<5)

{

y+= x;

x++;

}

循环语句:do…… while

do

{

y+= x;

x++;

}while( x<5);

循环语句:for

for( i=1; i<=10; i++)

{

x+= 2;

}

退出循环:break、continue

break语句可退出循环语句或 switch语句。

continue语句可结束本次循环,并开始下一次循环。

对象(Object)是JavaScript中最重要的一种数据类型,一个对象中可包含若干属性和方法。

属性相当于一种变量,有些属性一开始就有值,可以通过它们获取对象的参数,有些属性是只读的,这种属性可作为常量使用。引用对象属性的方法是:

对象名.属性名

方法相当于函数,你可以调用对象的方法来实现相应操作。引用对象方法的方法是:

对象名.方法名(参数)

有些方法不需要参数,但在调用时也不能省略括号。

JavaScript支持自定义对象,但我们在编程中使用的一般都是系统提供的对象。这些对象提供了丰富的属性和方法,可以在程序中直接使用它们。

JavaScript可访问的对象包括:本地对象、BOM对象和 DOM对象。

本地对象是JavaScript语言提供的对象,它们只能用于JavaScript程序中。包括 Boolean对象、Number对象、String对象、Array对象、Data对象、Math对象等。

BOM对象是由浏览器窗口提供的对象,它们由浏览器开发者提供,可以被包括JavaScript在内的脚本语言访问。包括 Window对象、Document对象、Navigator对象、Screen对象、History对象、Location对象等。

DOM对象是一种跨平台的对象,它们可以用于不同语言的程序中。DOM对象对应的是页面中的标签,每个HTML标签都是一个 DOM对象。

对象实例:

对象实例是对象的具体个体,一个对象可以拥有多个对象实例,比如每个字符串都是一个 String对象的实例,我们访问对象时,实际上访问的是对象的实例。

本地对象的实例一般是通过 new运算符生成的,比如:

var arr= new Array("red","yellow","blue");

var s="Hello";

arr是一个 Array对象的实例,s是一个 String原始类型,但它也是一个伪对象,可以引用 String对象的属性和方法。

BOM对象对应的是浏览器窗口,它本身已经实例化了,可以直接访问,比如:

window.alert("Hello!");

document.write("欢迎光临");

window是当前窗口的 Window对象的实例,document是当前窗口的 Document对象的实例。

DOM对象对应的是页面中的 HTML标签,每个标签都是某种 DOM对象的实例,它们往往是通过 Window对象或 Document对象间接访问的,比如:

var a= document.getElementById("txt");

document.getElementById("txt")用于获取页面中 id="txt"标签对应的 DOM对象。

注意:在JavaScript中,对象名、属性名、方法名都是区分大小写的,如:“Math.PI”不能写成“math.pi”,“document.write”也不能写成“Document.write”。

this关键字:

this是对当前对象自己的引用,用它可直接调用当前对象的属性和方法。比如:

<input type="radio" name="rr" value="A" onclick="sel(this.value)"/>

<input>是一个HTML标签,但它同时也是一个 DOM对象,其中的 this.value就是引用这个 Input对象的 value属性值。

请问这段javascript 代码是什么意思为什么能输出汉字。

这代码混淆,其实靠的是js的类型转化的一些基本原理。

换个简单点的例子吧,

(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]这个代码实际上等同于“sb”。

首先要运用到的第一个知识就是js运算符的优先级,因为这么长一段运算看的人眼花,我们必须得先根据优先级分成n小段,然后再各个击破。优先级的排列如下表:

优先级从高到低:

根据此规则,我们把这一串运算分为以下16个子表达式:

运算符用红色标出,有一点可能大家会意识不到,其实中括号[]也是一个运算符,用来通过索引访问数组项,另外也可以访问字符串的子字符,有点类似charAt方法,如:'abcd'[1]//返回'b'。而且中括号的优先级还是最高的哦。

预处理结束,接下来需要运用的就是javascript的类型转化知识了。我们先说说什么情况下需要进行类型转化。当操作符两边的操作数类型不一致或者不是基本类型(也叫原始类型)时,需要进行类型转化。先按运算符来分一下类:

减号-,乘号*,肯定是进行数学运算,所以操作数需转化为number类型。

加号+,可能是字符串拼接,也可能是数学运算,所以可能会转化为number或string

一元运算,如+[],只有一个操作数的,转化为number类型

下面来看一下转化规则。

1.对于非原始类型的,通过ToPrimitive()将值转换成原始类型:

ToPrimitive(input, PreferredType?)

可选参数PreferredType是Number或者是String。返回值为任何原始值.如果PreferredType是Number,执行顺序如下:

如果input为primitive,返回

否则,input为Object。调用 obj.valueOf()。如果结果是primitive,返回。

否则,调用obj.toString().如果结果是primitive,返回

否则,抛出TypeError

如果 PreferredType是String,步骤2跟3互换,如果PreferredType没有,Date实例被设置成String,其他都是Number

2.通过ToNumber()把值转换成Number,直接看ECMA 9.3的表格

3.通过ToString()把值转化成字符串,直接看ECMA 9.8的表格

规则就这么多,接下来实践一下,根据我们上面划分出的子表达式,一步一步将这个神奇的代码给执行出来。开工~

先看最简单的子表达式16:+[]

只有一个操作数[],肯定是转化为number了,根据上面的规则2,[]是个数组,object类型,即对象。所以得先调用toPrimitive转化为原始类型,并且PreferredType为number,这个参数表示更“倾向于”转化的类型,这里肯定是number了。然后首先调用数组的valueOf方法,数组调用valueOf会返回自身,如下:

这个时候,我们得到一个空串“”,还没有结束,看上面的规则2描述,继续调用toNumber,转化为number类型,如下:

大功告成!子表达式16转化完毕,+[],最终得到0。

来看子表达式15:[~+""]

空串""前面有两个一元操作符,但是操作数还是只有一个,所以,最终要转化为的类型是number。看规则2吧,空串调用toNumber得到0。接下来是~,这是个什么东东呢?它是位运算符,作用可以记为把数字取负然后减一,所以~0就是-1。

别忘了,这个子表达式外头还包着中括号,所以最终的值为[-1],即一个数组,里面只有一个元素-1.

接下来看子表达式13就简单了,把15、16求出来的填进去,就变成了这样:--[-1][0],取数组的第0个元素,然后自减,结果为-2,是不so easy!

继续往上走,子表达式14: [~+[]]

其实把15、和16的原理用上就非常明显了,答案[-1]

继续来求子表达式9,此刻它已变成:-2*[-1],有稍许不一样,不过没关系,我们还是按照规则来,运算符是乘号*,当然是做数学运算,那后面的[-1]就得转化为number,与16的求法类似,过程如下:

①调用toPrimitive,发现是object类型

②调用valueOf,返回自身[-1]

③因为不是原始类型,继续调用toString,返回"-1"

④"-1"是原始类型了,然后调用toNumber,返回-1

⑤与-2相乘,返回2

子表达式10:~~!+[],不多说了,答案1.就是从右往左依次一元计算。

有了9和10,我们来到了子表达式4,此刻它已经长这样了:2+1,好,我不多说了。

继续看表达式7:!(~+[]),~+[]=-1,这个根据上面已经知道了,那!-1是什么呢?这里要说一下这个感叹号,它是逻辑取非的意思,会把表达式转化为布尔类型,转化规则和js的Truthy和Falsy原则是一样的,后面跟数字的,除0以外都为false,后面跟字符串的,除空串以外都为false。这里的!-1当然就是false了。

接下来这个表达式3:false+{}有点关键。一个布尔加一个对象,那这个{}应该先转化为原始类型,流程如下:

①调用toPrimitive,发现是object类型

②调用valueOf,返回自身{},

③不是原始类型,调用toString,返回"[object Object]"

④false与"[object Object]"相加,false先转化为字符串"false"

⑤相加得结果"false[object Object]"

知道了表达式3和4,我们就可以来看表达式1了,此时它是这样的:"false[object Object]"[3],因为这个[]可以取字符串的子字符,像charAt一样,所以得到了结果"s"

经过上面艰难的流程,我们拿到了字符"s",也就是那张图的左半边,剩下的那个"b",相同的原理可以搞出来,我这里就不一一演示了,留给你练练吧~

回顾一下这个过程其实也不复杂,只是有一些需要重复劳动的,只要你掌握了运算的优先级,能把大串分解成一个个小串,然后运用类型转化的知识挨个处理就搞定了。怎么样,看到这里你还觉得神奇吗?

同样的,中文字符也是由这样组成的,跟英文同样的道理。

javascript算数运算符一点点小疑问。

首先你应该百度一下“自动类型转换”

关于字符串,只要用引号括起来就是字符串,不论引号中间是数字还是字母或其他符号。

a="100"

这个a如果不是字符串,是可以的,但是

a="100000000000000000000000000000000000000000000000000000"

如果去掉引号,就溢出了,因为任何编程语言中,都没有一种变量能容纳如此大的数。因此只能用字符串。

自动类型转换,如果一个字符串由数字组成且转换后不超出范围,就能转换成功,否则就会失败,出现NaN(not a number)错误。

a="100"

这个a是字符串,是不能直接进行运算的,之所以可以和其他数字相加得到正确结果,是因为在运算之前javascript解释器将a进行了自动类型转换,变成了数字。

打个比方,书上写着100,它本身是1,0,0三个字符组成的字符串,之所以你看成100,是因为你的大脑把这个字符串转换成了数字。

javascript运算符优先级的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于js位运算符怎么运算、javascript运算符优先级的信息别忘了在本站进行查找哦。

编程加盟哪一家比较好,学编程的学校哪所比较好免费游戏源码下载网站,网页游戏源代码