E-COM-NET

  • 首页
  • 在线工具
  • Layui镜像站
  • SUI文档
  • 联系我们
front_end_fan
front_end_fan

js基础-运算符

  • javascript

1 运算符

ECMA-262描述了一组用于操作数据值的运算符,包括算术运算符、位运算符、关系运算符和相等运算符。

1.1 一元运算符

只能操作一个值的运算符叫做一元运算符。

1.递增和递减

递增(++)和递减(–)都有两种使用方式: 前置型 和 后置型 。
前置型 指的是运算符放在要操作的变量之前,而 后置型 则是运算符放在要操作的变量之后。

var age = 10; 
var age2 = 10;
++age;
--age;
console.log(age); // 11
console.log(age2); //9

执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的(也就是先自增或自减,再和其他值进行操作):

var num = 2; 
var age = ++num + 2;
console.log(age); // 5

在上面的例子中,在与2相加之前,num已经加1变成了2。

后置型递增和递减运算符不变(依然是++和–),不过除了要放到变量之后外,包含它们的语句是被求值之后才执行(先和其他值进行操作后,再自增或自减):

var num = 2; 
var age = (num++) + 2;
console.log(age); // 4
console.log(num); // 3

注意:由于JavaScript会自动进行分号补全,因此不能在后增量运算符和操作数之间插入换行符

num 
++;

这会报错

这4个操作符对任何值都适用,不过,当应用于不同的值时,递减和递增操作符会遵循下列规则:

  • 当操作数是一个包含有效数字字符的字符串,系统会将其转换为数字值,再执行递减或递增。
  • 当操作数是一个不包含有效数字字符的字符串,系统将变量的值设置为NaN
  • 当操作数是布尔值,会将其转为数值(true转为1,false转为0)再操作。
  • 当操作数是浮点数值,直接执行递减或递增
  • 当操作数是对象,先调用对象的valueOf()方法取得一个可供操作的值,然后再遵循上面的三条规则。如果结果是NaN,则在调用toString()方法后再遵循上面的规则转换。
var a = '2'; 
var b = 'a';
var c = false;
var d = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
a++; // 3
b++; // NaN
c--; // -1
d--; // 0.10000000000000009 (浮点数操作结果,类似0.1+0.2 != 0.3)
o--; -2

2.一元加和减运算符

一元加(+)和减(-)运算符和数学上的含义一样,表示负正。

不过,对非数值应用一元加运算符时,该运算符就像Number()转型函数一样对这个值执行转换。(转换规则参考数据类型那一节中的Number()的转换规则)

一元减运算符对数值是表示负数,而对于非数值,转换规则和一元加(也就是和Number())一样,然后将转换后的数值转为负数。

1.2 位运算符

位运算符是按内存中表示数值的位来操作数值。

ECMAScript中的数值都以IEEE-75464位格式存储,但位运算符并不直接操作64位的值,而是先将64位的值转换为32位,然后执行操作,最后将结果转换回64位。

对于有符号的整数,32位(从右往左,最右边为第一位)中的前31位用于表示整数的值,第32位用于表示数值的符号:0表示正数,1表示负数。这个表示符号的位叫做符号位。符号位的值决定了其他位数值的格式。

正数以纯二进制格式存储,31位中的每一位(从右往左)都表示2的幂。第一位(叫做位0)表示2^0,第二位表示2^1,以此类推。没有用到的位以0填充,可以忽略。

18 
二进制表示法:10010

2^4 × 1 + 2^3 × 0 + 2^2 × 0 + 2^1 × 1 + 2^0 × 0 = 18

负数同样以二进制码存储,但使用的格式是二进制补码。

如何计算一个数值的二进制补码?需要3个步骤:

  • 求这个数值绝对值的二进制码
  • 求二进制反码,即0替换1,将1替换0
  • 得到二进制反码加1
-18 
//第一步,求18的二进制码
0000 0000 0000 0000 0000 0000 0001 0010
// 求反码,后加1
1111 1111 1111 1111 1111 1111 1110 1101
1
1111 1111 1111 1111 1111 1111 1110 1110 // -18的二进制表示

如果对非数值应用位运算符,会先使用Number()函数将该值转换为一个数值(自动转换),再进行位运算符操作,最后得到一个数值

当你去求负数的二进制时,ECMAScript会尽力向我们隐藏所有这些信息。比如:

var num = -18; 
console.log(num.toString(2)); // "-10010"

上面的代码对负数求二进制码,得到的结果只是这个负数绝对值的二进制码前面加上一个负号。

(1)按位非(NOT)

按位非运算符(~)进行 否运算 ,执行按位非的结果就是返回数值的反码。

~ 3  // -4 

上面的表达式对3进行否运算,得到-4。

//3的二进制码 
00000000000000000000000000000011

// 取反码
11111111111111111111111111111100

//补码转为十进制的规则,在下面可以看到
11111111111111111111111111111011 //减1

00000000000000000000000000000100 //再次取反得到~3的十进制,也就是4,加上负号,就是-4

负数二进制码(补码)转换为十进制的规则:需要将这个数减去1,再取一次反,然后加上负号,才能得到这个负数对应的10进制值。

看起来是不是眼花缭乱,其实我们可以不用管里面的转换逻辑,只需记得按位非(否运算)就是 一个数与自身的取反值相加,等于-1 。

~3  + 3 = -1  => -1 - 3 = -4 == ~3 

2.按位与(AND)

使用按位与(&)运算符来进行 与运算 ,它有两个运算符数。

0 & 3  //0

0和1的二进制是00和11
00
11
00

运算规则是只有两个数值的对应位都是1时才返回1,其他情况返回0。

按位或(OR)

使用按位或(|)运算符进行 或运算 .

0 | 3  // 3

00
11
11

或运算的规则是只要有一个位是1就返回1,只有两个位都是0时才返回0

位运算只对整数有效,遇到小数时,会将小数部分舍去,只保留整数部分。所以,将一个小数与0进行或运算,等同于对该数去除小数部分,即取整数位。

4.按位异或(XOR)

使用按位异或(^)来进行 异或运算 。

0 ^ 3  //  3 
00
11
11

异或运算的规则是两个数值的对应位上只有一个1时才返回1,其他情况返回0.

5.左移

左移运算符(<<),这个运算符会将所有位向左移动指定的位数,尾部补0。

2 << 5  // 64 
2的二进制码
10
1000000

左移可看做是数值乘以2的指定次方

注意:左移不会影响操作数的符号位,也就是说,-2向左移动5位后,是-64

6.右移

(1)有符号的右移

有符号的右移(>>)将数值向右移动,但保留符号位(即正负号标记,也就是第32位)

64 >> 5  // 2 
1000000
10

-64 >> 5 //-2

有符号的右移可看做是数值除以2的指定次方

(2)无符号的右移

无符号的右移(>>>),这个运算符会将数值的所有32位向右移动。对正数来说,无符号右移的结果与有符号右移相同:

64 >>> 5  //2 

但负数就不一样了,无符号右移是以0来填充空位的,所以无符号右移得到的结果都是正数。

-64 >>> 5  // 134217726 

有一点需要特别注意,位运算符只对整数起作用,如果一个运算子不是整数,会自动转为整数后再执行。

1.3 布尔运算符

布尔运算符是用来比较两个值的关系的。

1. 逻辑非(or)

逻辑非(!)可以应用于JavaScript中的任何值,最终都会返回一个布尔值。

逻辑非运算符首先会将它的操作数转换为一个布尔值,然后再取反。

逻辑非规则 :

  • 如果操作数是一个对象、非空字符串、任意非0数值(包括Infinity),则返回false
  • 如果操作数是空字符串、数值0、null、undefined、NaN,则返回true

如果同时使用两个(!!),就会像使用Boolean()转型函数一样的转换逻辑。

!false  // true 
!'tg' // false
!'' // true

!!0 //false

2.逻辑与

逻辑与(&&)有两个操作数,如果是布尔值,只有两个都是true时,才会返回true,否则返回false

 var isTrue = true && false;  //false 

如果不是布尔值,它遵循下面的规则:

  • 如果第一个操作数是对象,则返回第二个操作数
  • 如果第二个操作数是对象,则只有在第一个操作数的求值为true时才会返回第二个操作数
  • 如果有一个操作数是null,则返回null
  • 如果有一个操作数是NaN,则返回NaN
  • 如果有一个操作数是undefined,则返回undefined

逻辑与操作符也就是先将第一个操作数转换为Boolean类型判断是true或false,再根据结果决定是否执行第二个操作数

0 && 'tg' ;  //  0 
{} && 'tg'; // "tg"

逻辑与操作属于短路操作,也就是说如果第一个操作数能够决定结果(等于false时),就不会再对第二个操作数求值。

3.逻辑或

逻辑或(||)也有两个操作数。

如果两个操作数都是布尔值,则有一个为true时,就返回true,否则返回false。

如果有一个操作数不是布尔值,则遵循下列规则:

  • 如果第一个操作数是对象,则返回第一个操作数
  • 如果第一个操作数的求值结果是false,则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数都是null,则返回null
  • 如果两个操作数都是NaN,则返回NaN
  • 如果两个操作数都是undefined,则返回undefined

逻辑或也是短路运算符,也就是说,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。

true || 'tg';  // true 
0 || 'tg'; // "tg"

一般情况下,我们可以使用逻辑或来避免变量赋null或undefined值:

function test(name){ 
name = name || 'tg';
console.log(name);
}
test(); // "tg"
test('tg2'); // "tg2"

上面的例子,表示当调用test()方法不传参时,name赋予一个默认值”tg”;如果带有参数,则使用参数值。

注意:逻辑与(&&)和逻辑或(||)返回的都是运算值。

1.4 乘性运算符

ECMAScript定义了3个乘性运算符:乘法、除法和求模。

当操作数是非数值时,会执行自动的类型转换。如果操作数不是数值,会先使用Number()转型函数将其转换为数值(后台自动),再进行运算。

1.乘法

乘法运算符( ),用于计算两个数值的乘积。

处理特殊值时,乘法运算符会遵循下列规则:

  • 如果操作数都是数值,但乘积超过了ECMAScript数值范围,则返回Infinity或-Infinity
  • 如果有一个操作数是NaN,结果是NaN
  • 如果是Infinity乘以0,结果是NaN
  • 如果是Infinity与非0数值相乘,结果是Infinity或-Infinity,取决于非0数值的符号
  • 如果是Infinity与Infinity相乘,结果是Infinity
  • 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后遵循上面的规则
console.log(1  NaN);  // NaN 
console.log( Infinity * 2); // Infinity
console.log(Infinity * 0); // NaN
console.log(Infinity * Infinity); // Infinity

2.除法

除法运算符(/),执行第二个操作数除第一个操作数计算。

处理特殊值,规则如下:

  • 如果操作数都是数值,但商超过了ECMAScript的表示范围,则返回Infinity或-Infinity
  • 如果有一个操作数是NaN,结果是NaN
  • 如果是Infinity被Infinity除,结果是NaN
  • 如果是零被零除,结果是NaN
  • 如果是非零的有限数被零除,结果是Infinity或-Infinity,取决于有符号的操作数
  • 如果是Infinity被任何非零数值除,结果是Infinity或-Infinity
  • 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后遵循上面的规则。
console.log(NaN / 1); // NaN 
console.log(0 / 0); // NaN
console.log(1 / 0); // Infinity
console.log(2 / Infinity); // 0
console.log(Infinity / Infinity); // NaN
console.log(Infinity / 2); // Infinity

3.求模

求模(余数)运算符(%)

处理特殊值,规则如下:

  • 如果被除数是无穷大值而除数是有限大的数值,结果是NaN
  • 如果被除数是有限大的数值而除数是零,结果是NaN
  • 如果是Infinity被Infinity除,结果是NaN
  • 如果被除数是有限大的数值而除数是无穷大的数值,结果是被除数
  • 如果被除数是零,结果是零
  • 如果有一个操作数不是数值,则在后台调用Number()将其转换为数值,然后遵循上面的规则。
console.log(5 % 3);  // 2 

1.5加性运算符

加性运算符也会在后台转换不同的数据类型。

1.加法

如果两个操作数都是数值,执行常规的加法计算,然后根据下面的规则返回结果:

  • 如果有一个操作数是NaN,结果是NaN
  • 如果Infinity加Infinity,结果是Infinity
  • 如果是-Infinity加-Infinity,结果是-Infinity
  • 如果是Infinity加-Infinity,结果是NaN
  • 如果是+0加+0,结果是+0
  • 如果是-0加-0,结果是-0
  • 如果是+0加-0,结果是+0

如果有一个操作数是字符串,则遵循下列规则:

  • 如果两个操作数都是字符串,则拼接两个字符串
  • 如果只有一个操作数是字符串,则将另一操作数转换为字符串,然后拼接
  • 如果有一个操作数是对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值,然后遵循上面的规则。对于undefined和null,则分别调用String()函数并取得字符串”undefined”和”null”。
5 + 5   //10 
5 + '5" // "55"

如果你要在有字符串操作数的加法中执行常规的加法操作,应该使用圆括号将要相加的数值括起来:

'tg' + 5 + 5  //  "tg55" 
'tg" + (5 + 5) // "tg10"

2.减法

减法运算符(-)

对于特殊值,减法操作会遵循下列规则:

  • 如果有一个操作数是NaN,结果是NaN
  • 如果Infinity减Infinity,结果是NaN
  • 如果是-Infinity减-Infinity,结果是NaN
  • 如果是Infinity减-Infinity,结果是Infinity
  • 如果是-Infinity减Infinity,结果是-Infinity
  • 如果是+0减+0,结果是+0
  • 如果是-0加-0,结果是+0
  • 如果是+0减-0,结果是-0
  • 如果有一个操作数是字符串、布尔值、null或undefined,则先在后台调用Number()将其转换为数值,然后遵循上面的规则进行计算。
  • 如果有一个操作数是对象,则调用对象的valueOf()方法以取得表示该对象的数值;如果该对象没有valueOf()方法,则调用其toString()方法将得到的字符串转换为数值,然后遵循上面的规则进行计算。
5 - true;  // 4 (true转换成1) 
5 - '2' // 3
5 - null; // 5(null转换成0)

1.6 关系运算符

小于(<)、大于(>)、小于等于(<=)和大于等于(>=)四个关系运算符用来对两个值进行比较,最后返回一个布尔值。

当使用了非数值时,则会遵循下列规则:

  • 如果两个操作数是字符串,则比较两个字符串对应的字符编码值
  • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后进行比较
  • 如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则比较。如果对象没有valueOf()方法,则调用toString()方法,并用得到的结果按照上面的规则进行比较。
  • 如果一个操作数是布尔值,则先将其转换为数值,然后进行比较。

注意 :在使用关系运算符比较两个字符串时,比较的是两个字符串中对应位置的每个字符的字符编码值(从左往右),经过逐个比较后,直到有胜负(也就是不相等时),再返还布尔值。

'abc' > 'abd'  //false 
'A' < 'a' // true
'23' < '3' // true

在上面的例子中,第一行代码会先比较”a”和”a”,然后是”b”和”b”,最后是”c”和”d”,由于c的字符编码值是63,d的字符编码值是64,所以返还false。

由于小写字母的字符编码值总是大于大写字母的字符编码值,所以第二行代码返还true。

第三行代码也是字符串比较,所以比较的是字符编码值(2是50,3是51),所以返回true

注意:任何操作数与NaN比较,都会返回false。

1.7 相等运算符

相等运算符有两组:相等和不相等(先转换再比较)、全等和不全等(只比较不转换)

1.相等和不相等

相等(==),不相等(!=)

这两个运算符都会先转换操作数(强制转换),然后比较。

对于不同的数据类型,转换规则如下:

  • 如果有一个操作数是布尔值,则在比较前先将其转换为数值(false转为0,true转为1)
  • 如果一个操作数是字符串,另一个操作数是数值,先将字符串转为数值
  • 如果一个操作数是对象,另一个不是,先调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较
  • null和undefined是相等的

    要比较之前,不能将null和undefined转换成其他任何值
  • 如果有一个操作数是NaN,则相等运算符返回false,不相等运算符返回true。(要记住NaN不等于本身原则)
  • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等运算符返回true,否则返回false。
NaN == NaN  // false 
true == 1 // true
null == undefined // true

2.全等和不全等

除了在比较之前不转换操作数类型之外,全等和不全等与相等和不相等没什么区别。

'55' == 55  // true 
'55' === 55 // false

1.8 条件运算符

条件运算符是ECMAScript中唯一的三元运算符。

variable = boolean_expression ? true_value : false_value; 

如果boolean_expression返回true,则执行true_value,否则,执行false_value

var name = (1 > 2) ? 'tg' : 'tg2';   // "tg2" 

上面的代码中1小于2,所以是false,则将”tg2”赋值给name。

1.9 赋值运算符

(=)是最简单的赋值操作,其作用是把右侧的值赋给左侧变量。

var name = 'tg'; 

复合赋值运算符

乘赋值(x = y)  等同于   x = x  y 
除赋值(x /= y) 等同于 x = x / y
模赋值(x %= y) 等同于 x = x % y
加赋值(x += y) 等同于 x = x + y
减赋值(x -= y) 等同于 x = x - y
左移赋值(x <<= y) 等同于 x = x << y
有符号右移赋值(x >>= y) 等同于 x = x >> y
无符号右移赋值(x >>>= y) 等同于 x = x >>> y

例子:

var a = 1; 
a += 1;
console.log(a); // 2

1.10 逗号运算符

使用逗号运算符可以在一条语句中执行多个操作:

var  name = 'tg', age = 1; 

逗号运算符多用于声明多个变量。

逗号运算符还可以用于赋值。在用于赋值时,逗号运算符总会返回表达式中的最后一项:

var num = (1,5,3);  // num的值为3 

3是表达式中的最后一项,因此num的值就是3.

1.11 in运算符

in运算符希望它的左操作数是一个字符串或可以转换成为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有一个名为左操作数值的属性名,则返回true。

var o = {x:1}; 
"x" in o //true

1.12 instanceof运算符

instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true。

var a = new Array(); 
a instanceof Object; //true

注意:所有对象都是Object的实例

1.13 typeof运算符

typeof是一元运算符,用来判断数据类型:

typeof 1  // "number" 

1.14 delete运算符

delete是一元运算符,它用来删除对象的属性或数组元素。

var o={x:1} 
delete o.x;
"x" in o //false

1.15 void运算符

void 是一元运算符,它出现在操作数之前,操作数可以是任意类型。操作数会照常计算,但忽略计算结果并返回undefined。

void 0  //undefined 
void(0) //undefined

var a = 1;
void (a=2);
a //2

这个运算符主要是用于书签工具(bookmarklet),以及用于在超级链接中插入代码,目的是返回undefined可以防止网页跳转。

<a href="javascript:void(0)">a> 

2. 运算顺序

2.1 优先级

JavaScript各种运算符的优先级别(Operator Precedence)是不一样的。优先级高的运算符先执行,优先级低的运算符后执行。

2.2 圆括号

圆括号(())可以用来提高运算的优先级,因为它的优先级是最高的,即圆括号中的表达式会第一个运算。

注意:因为圆括号不是运算符,所以不具有求值作用,只改变运算的优先级。

对于优先级别相同的运算符,大多数情况,计算顺序总是从左到右,这叫做运算符的“左结合”(left-to-right associativity),即从左边开始计算。

但是少数运算符的计算顺序是从右到左,即从右边开始计算,这叫做运算符的“右结合”(right-to-left associativity)。其中,最主要的是赋值运算符(=)和三元条件运算符(?:)。

你可能感兴趣的:(javascript)

  • JSON 与 AJAX Auscy jsonajax前端
    一、JSON(JavaScriptObjectNotation)1.数据类型与语法细节支持的数据类型:基本类型:字符串(需用双引号)、数字、布尔值(true/false)、null。复杂类型:数组([])、对象({})。严格语法规范:键名必须用双引号包裹(如"name":"张三")。数组元素用逗号分隔,最后一个元素后不能有多余逗号。数字不能以0开头(如012会被解析为12),不支持八进制/十六进制
  • JavaScript 树形菜单总结 Auscy microsoft
    树形菜单是前端开发中常见的交互组件,用于展示具有层级关系的数据(如文件目录、分类列表、组织架构等)。以下从核心概念、实现方式、常见功能及优化方向等方面进行总结。一、核心概念层级结构:数据以父子嵌套形式存在,如{id:1,children:[{id:2}]}。节点:树形结构的基本单元,包含自身信息及子节点(若有)。展开/折叠:子节点的显示与隐藏切换,是树形菜单的核心交互。递归渲染:因数据层级不固定,
  • 精通Canvas:15款时钟特效代码实现指南 烟幕缭绕
    本文还有配套的精品资源,点击获取简介:HTML5的Canvas是一个用于绘制矢量图形的API,通过JavaScript实现动态效果。本项目集合了15种不同的时钟特效代码,帮助开发者通过学习绘制圆形、线条、时间更新、旋转、颜色样式设置及动画效果等概念,深化对Canvas的理解和应用。项目中的CSS文件负责时钟的样式设定,而JS文件则包含实现各种特效的逻辑,通过不同的函数或类处理时间更新和动画绘制,提
  • 【前端】jQuery数组合并去重方法总结
    在jQuery中合并多个数组并去重,推荐使用原生JavaScript的Set对象(高效简单)或$.unique()(仅适用于DOM元素,不适用于普通数组)。以下是完整解决方案:方法1:使用ES6Set(推荐)//定义多个数组constarr1=[1,2,3];constarr2=[2,3,4];constarr3=[3,4,5];//合并数组并用Set去重constmergedArray=[...
  • 日历插件-FullCalendar的详细使用 老马聊技术 JavaScript前端javascript
    一、介绍FullCalendar是一个功能强大、高度可定制的JavaScript日历组件,用于在网页中显示和管理日历事件。它支持多种视图(月、周、日等),可以轻松集成各种框架,并提供丰富的事件处理功能。二、实操案例具体代码如下:FullCalendar日期选择body{font-family:Arial,sans-serif;margin:20px;}#calendar{max-width:900
  • javascript高级程序设计第3版——第12章 DOM2与DOM3 weixin_30687587 javascript数据结构与算法ViewUI
    12章——DOM2与DOM3为了增强D0M1,DOM级规范定义了一些模块。DOM2核心:为不同的DOM类型引入了一些与XML命名空间有关的方法,还定义了以编程方式创建Document实例的方法;DOM2级样式:针对操作元素的样式而开发;其特性总结:1.每个元素都有一个关联的style对象,可用来确定和修改行内样式;2.要确定某个元素的计算样式,可使用getComgetComputedStyle()
  • JavaScript 基础09:Web APIs——日期对象、DOM节点 梦想当全栈 JavaScriptjavascript前端开发语言
    JavaScript基础09:WebAPIs——日期对象、DOM节点进一步学习DOM相关知识,实现可交互的网页特效能够插入、删除和替换元素节点。能够依据元素节点关系查找节点。一、日期对象掌握Date日期对象的使用,动态获取当前计算机的时间。ECMAScript中内置了获取系统时间的对象Date,使用Date时与之前学习的内置对象console和Math不同,它需要借助new关键字才能使用。1.实例
  • JavaScript之DOM操作与事件处理详解 AA-代码批发V哥 JavaScriptjavascript
    JavaScript之DOM操作与事件处理详解一、DOM基础:理解文档对象模型二、DOM元素的获取与访问2.1基础获取方法2.2集合的区别与注意事项三、DOM元素的创建与修改3.1创建与插入元素3.2修改元素属性与样式3.2.1属性操作3.2.2样式操作3.3元素内容的修改四、DOM元素的删除与替换4.1删除元素4.2替换元素五、事件处理:实现页面交互5.1事件绑定的三种方式5.1.1HTML属性
  • V少JS基础班之第五弹 V少在逆向 JS基础班javascript开发语言ecmascript
    文章目录一、前言二、本节涉及知识点三、重点内容1-函数的定义2-函数的构成1.函数参数详解1)参数个数不固定2)默认参数3)arguments对象(类数组)4)剩余参数(Rest参数)5)函数参数是按值传递的6)解构参数传递7)参数校验技巧(JavaScript没有类型限制,需要手动校验)2.函数返回值详解3-函数的分类1-函数声明式:2-函数表达式:3-箭头函数:4-构造函数:5-IIFE:6-
  • Javaweb学习之Vue模板语法(三) 不要数手指啦 vue.js学习前端
    目录学习资料前情回顾本期介绍(vue模板语法)文本插值Vue的Attribute绑定使用JavaScript表达式综合实例代码:学习资料Vue.js-渐进式JavaScript框架|Vue.js(vuejs.org)前情回顾项目的创建大家可以看这篇文章Vue学习之项目的创建-CSDN博客本期介绍(vue模板语法)首先,找到我们编写代码的地方找到自己项目的src文件夹,打开之后点击component
  • 深入解析 “void(0);” 的用法与作用_void(0);
    关键要点void(0);是JavaScript中的一个表达式,研究表明它通常用于超链接中,防止页面跳转。它通过void运算符计算表达式并返回undefined,常用于创建“死链接”。证据显示,这种用法简单易用,但现代开发更推荐使用事件监听器。基本概念void(0);的作用void(0);是JavaScript的void运算符的一个实例,void运算符会计算一个表达式但不返回任何值,而是始终返回un
  • 【JS三兄弟谁是谁】搞懂 splice、slice、split,只需一杯奶茶的时间! dorabighead 前端八股总结javascript前端开发语言
    JavaScript有三兄弟,经常一起“切人”。他们名字相似、功能相关,但性格迥异,常被搞混。今天,就带你喝着奶茶,笑着剖析,帮你彻底搞懂:splice、slice、split到底是谁?干了啥?凭啥这么火?一、三兄弟登场:不同对象,不同任务名称作用对象是否修改原对象返回类型功能简述splice数组✅是被删除元素数组原地删除元素并可插入新元素slice数组/字符串❌否副本(子集)复制选中部分,原体不
  • 前端面试题总结——JS篇 又又呢 前端javascript开发语言
    一、说说JavaScript中的数据类型?存储上有什么差别?1、数据类型基本类型number:数值类型十进制:letintNum=55八进制(零开头):letnum1=070十六进制(0x开头):lethexNum1=0xANaN:特殊数值,意为“不是数值”string:字符串类型boolean:布尔值,true或falseundefined:表示未定义null:空值symbol:是原始值,且符号
  • 前端面试题——5.AjAX的缺点? 浅端 前端面试题前端面试题
    ①传统的web交互是:用户一个网页动作,就会发送一个http请求到服务器,服务器处理完该请求再返回一个完整的HTML页面,客户端再重新加载,这样极大地浪费了带宽。②AJAX的出现解决了这个问题,它只会向服务器请求用户所需要的数据,并在客户端采用JavaScript处理返回的数据,操作DOM更新页面。③AJXA优点:无刷新更新页面异步服务器通信前端后端负载均衡④AJAX缺点:干掉了Back和Hist
  • JavaScript知识归纳——面试题 Dream_Lee_1997 JavaScriptjs面试题
    JavaScript面试题总结JavaScript知识点1、JavaScript中settimeout与setinteval两个函数的区别?2、编写JavaScript脚本生成1-6之间的整数?3、在JavaScript脚本中,isNaN的作用是什么?4、JavaScript中获取某个元素有哪几种方式?5、Ajax的优缺点都有什么?6、简述一下Ajax的工作原理。7、JavaScript中的数据类
  • 2023高薪前端面试题(二、前端核心——Ajax)
    原生AjaxAjax简介Ajax全程为AsynchronousJavaScript+XML,就是异步的JS和XML通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势是:无刷新获取数据,实现局部刷新Ajax是一种用于创建快速动态网页的技术AJAX不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式Ajax的应用场景页面上拉加载更多数据列表数据无刷新分页表单项离开焦点数据验证搜索框提示
  • 配置Nginx实现静态资源访问 Gappsong874 nginx运维网络安全web安全安全架构运维开发
    Nginx是一款高性能的HTTP和反向代理服务器,常用于处理静态资源请求。通过合理配置,可以显著提升静态资源的访问速度和服务器性能。以下内容将详细介绍如何配置Nginx以实现静态资源的高效访问。基本静态资源配置静态资源通常包括HTML文件、CSS样式表、JavaScript脚本、图片、视频等。Nginx通过简单的配置即可处理这些请求。在Nginx的配置文件中,通常位于/etc/nginx/ngin
  • 微信小程序开发:从漫画阅读到商业变现 永远的12
    本文还有配套的精品资源,点击获取简介:微信小程序作为一种轻量级应用平台,在无需下载安装的情况下提供便捷服务,尤其在漫画阅读领域得到广泛应用。本文介绍了微信小程序的基础开发框架,包括WXML、WXSS和JavaScript的使用,以及漫画小程序的核心功能设计,如漫画分类、搜索、详情展示、阅读模式等。同时,探讨了在小程序中加入广告ID以实现商业变现,包括广告组件的集成和广告政策的遵守。最后,强调了漫画
  • 浏览器视角看 —— 消息队列和事件循环、宏任务和微任务 DTcode7 HTML网站开发#前端基础入门三大核心之htmlHTML前端webJavaScript网页开发
    浏览器视角看——消息队列和事件循环、宏任务和微任务1.JavaScript执行模型简介2.消息队列与事件循环2.1消息队列2.2事件循环示例一:基本事件循环3.宏任务与微任务3.1宏任务与微任务的区别3.2微任务的执行时机示例二:宏任务与微任务的执行顺序4.深入理解事件循环4.1事件循环的生命周期4.2事件循环的阶段5.应用技巧与分析5.1使用微任务优化性能示例三:使用微任务优化DOM操作5.2利
  • 前端每周清单第 16 期:JavaScript 模块化现状;Node V8 与V6 真实性能对比
    前端每周清单第16期:JavaScript模块化现状;NodeV8与V6真实性能对比;Nuxt.jsSSR与权限验证指南为InfoQ中文站特供稿件,首发地址为这里;如需转载,请与InfoQ中文站联系。从属于笔者的Web前端入门与工程实践的前端每周清单系列系列;部分文章需要自备梯子。前端每周清单第16期:JavaScript模块化现状;NodeV8与V6真实性能对比;Nuxt.jsSSR与权限验证指
  • NodeJS VM2沙箱逃逸漏洞分析【CVE-2023-29199】 R3s3arcm NodeJS漏洞分析node.js安全安全威胁分析
    NodeJSVM2沙箱逃逸漏洞分析【CVE-2023-29199】简介Node.js是一个基于V8引擎的开源、跨平台的JavaScript运行环境,它可以在多个操作系统上运行,包括Windows、macOS和Linux等。Node.js提供了一个运行在服务器端的JavaScript环境,使得开发者可以编写并发的、高效的服务器端应用程序。Node.js使用事件驱动、非阻塞I/O模型来支持并发运行。它
  • 前端开发常见问题
    技术文章大纲性能优化问题页面加载速度慢的常见原因及解决方案渲染阻塞资源的处理方法图片与媒体文件优化策略懒加载与代码分割的实现方式浏览器兼容性问题不同浏览器对CSS特性的支持差异JavaScriptAPI的兼容性处理方案Polyfill的使用场景与实现方法自动化测试工具在兼容性测试中的应用响应式设计挑战移动端与桌面端布局适配问题媒体查询的最佳实践方案视口单位与相对单位的正确使用高DPI屏幕的图像处理
  • selenium跳转到新页面时如何进行定位
    在Selenium中,当你跳转到新页面(例如通过点击链接、提交表单或JavaScript重定向)时,通常会遇到页面加载或窗口切换的问题。为了在新页面上继续进行页面定位操作,你需要确保以下几点:✅1.等待页面加载完成Selenium默认不会自动等待页面加载完成。因此,你需要使用显式等待(ExplicitWait)来确保元素存在后再进行操作。示例代码(Python):fromseleniumimpor
  • 极简Vue 3应用:从入门到掌握核心概念 程序猿全栈の董(董翔) vue.js前端javascript
    Vue.js作为一款渐进式JavaScript框架,以其直观的API和灵活的架构受到广泛欢迎。对于初学者而言,Vue官方CLI生成的项目结构可能略显复杂,包含了各种资源文件、样式和示例组件。本文将介绍如何创建一个最简洁的Vue3应用,帮助你专注于核心概念的学习。为什么需要最简Vue应用?VueCLI默认生成的项目包含:assets目录:存放图片、字体等资源components目录:包含多个示例组件
  • node.js、npm是什么?服务器脚本语言有哪些?
    文章目录1.node和nodejs有区别吗:2.Node.js是什么3.NPM4.安装Node.js和npm5.使用appium之前为什么安装node.js?6.Vue.js一定要安装node.js吗?7.开发环境:1.node和nodejs有区别吗:node和nodejs之间没有区别,node全称就是nodejs。nodejs是一个基于ChromeV8引擎的JavaScript运行环境,一个让J
  • 前端高频面试题深度解析(JavaScript + Vue + jQuery)
    前端高频面试题深度解析(JavaScript+Vue+jQuery)一、JavaScript核心问题解析事件冒泡与捕获机制对比:graphLRA[捕获阶段]-->|Window→父元素|B[目标元素]B-->|子元素→父元素|C[冒泡阶段]阻止方法://阻止冒泡(常用)event.stopPropagation();//阻止捕获+冒泡+默认行为(慎用)event.stopImmediateProp
  • TypeScript在大型前端项目中的应用与优势 天天进步2015 前端开发前端typescriptjavascript
    引言随着Web应用规模和复杂度的不断增长,JavaScript作为弱类型语言的局限性日益凸显。TypeScript作为JavaScript的超集,为大型前端项目提供了强大的类型系统和先进的开发工具支持,极大地提升了开发效率和代码质量。本文将深入探讨TypeScript在大型前端项目中的应用与优势。TypeScript简介TypeScript是由Microsoft开发的开源编程语言,它是JavaSc
  • JavaScript 在前端 UI 框架中的应用与选型 大厂前端小白菜 前端开发实战前端javascriptuiai
    JavaScript在前端UI框架中的应用与选型关键词:JavaScript、前端UI框架、应用、选型、React、Vue.js、Angular摘要:本文深入探讨了JavaScript在前端UI框架中的应用与选型问题。首先介绍了前端UI框架的背景知识,包括目的、预期读者、文档结构等。接着阐述了核心概念,分析了JavaScript与前端UI框架的联系。通过具体的算法原理和操作步骤,结合Python代
  • JavaScript 编程精解(Eloquent)第四版(四) 绝不原创的飞龙 默认分类默认分类
    译者:飞龙协议:CCBY-NC-SA4.0第十九章:HTTP与表单超文本传输协议(HyperTextTransferProtocol),在第十三章中介绍,是在万维网上请求和提供数据的机制。本章更详细地描述了该协议,并解释了浏览器JavaScript如何访问它。协议如果你在浏览器的地址栏中输入[eloquentjavascript.net/18_http.xhtml](http://eloquent
  • react移动端开发 暖阳浅笑-嘿 前端reactnative
    React在移动端开发中的应用非常广泛,其独特的组件化开发模式和高效的性能使得它成为许多开发者的首选。一、React移动端开发概述React本身是一个用于构建用户界面的JavaScript库,它并不直接针对移动端或Web端,但由于其灵活性和高效性,被广泛应用于移动端开发中。特别是在结合ReactNative等框架时,React能够充分发挥其优势,为移动端应用提供接近原生的性能和体验。二、React
  • Spring中@Value注解,需要注意的地方 无量 springbean@Valuexml
    Spring 3以后,支持@Value注解的方式获取properties文件中的配置值,简化了读取配置文件的复杂操作 1、在applicationContext.xml文件(或引用文件中)中配置properties文件 <bean id="appProperty" class="org.springframework.beans.fac
  • mongoDB 分片 开窍的石头 mongodb
        mongoDB的分片。要mongos查询数据时候 先查询configsvr看数据在那台shard上,configsvr上边放的是metar信息,指的是那条数据在那个片上。由此可以看出mongo在做分片的时候咱们至少要有一个configsvr,和两个以上的shard(片)信息。     第一步启动两台以上的mongo服务 &nb
  • OVER(PARTITION BY)函数用法 0624chenhong oracle
    这篇写得很好,引自 http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html OVER(PARTITION BY)函数用法 2010年10月26日 OVER(PARTITION BY)函数介绍 开窗函数        &nb
  • Android开发中,ADB server didn't ACK 解决方法 一炮送你回车库 Android开发
    首先通知:凡是安装360、豌豆荚、腾讯管家的全部卸载,然后再尝试。   一直没搞明白这个问题咋出现的,但今天看到一个方法,搞定了!原来是豌豆荚占用了 5037 端口导致。 参见原文章:一个豌豆荚引发的血案——关于ADB server didn't ACK的问题 简单来讲,首先将Windows任务进程中的豌豆荚干掉,如果还是不行,再继续按下列步骤排查。 &nb
  • canvas中的像素绘制问题 换个号韩国红果果 JavaScriptcanvas
    pixl的绘制,1.如果绘制点正处于相邻像素交叉线,绘制x像素的线宽,则从交叉线分别向前向后绘制x/2个像素,如果x/2是整数,则刚好填满x个像素,如果是小数,则先把整数格填满,再去绘制剩下的小数部分,绘制时,是将小数部分的颜色用来除以一个像素的宽度,颜色会变淡。所以要用整数坐标来画的话(即绘制点正处于相邻像素交叉线时),线宽必须是2的整数倍。否则会出现不饱满的像素。 2.如果绘制点为一个像素的
  • 编码乱码问题 灵静志远 javajvmjsp编码
    1、JVM中单个字符占用的字节长度跟编码方式有关,而默认编码方式又跟平台是一一对应的或说平台决定了默认字符编码方式;2、对于单个字符:ISO-8859-1单字节编码,GBK双字节编码,UTF-8三字节编码;因此中文平台(中文平台默认字符集编码GBK)下一个中文字符占2个字节,而英文平台(英文平台默认字符集编码Cp1252(类似于ISO-8859-1))。 3、getBytes()、getByte
  • java 求几个月后的日期 darkranger calendargetinstance
    Date plandate = planDate.toDate(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(plandate); // 取得三个月后时间 cal.add(Calendar.M
  • 数据库设计的三大范式(通俗易懂) aijuans 数据库复习
    关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库. 目前,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推。
  • 想学工作流怎么入手 atongyeye jbpm
    工作流在工作中变得越来越重要,很多朋友想学工作流却不知如何入手。 很多朋友习惯性的这看一点,那了解一点,既不系统,也容易半途而废。好比学武功,最好的办法是有一本武功秘籍。研究明白,则犹如打通任督二脉。 系统学习工作流,很重要的一本书《JBPM工作流开发指南》。 本人苦苦学习两个月,基本上可以解决大部分流程问题。整理一下学习思路,有兴趣的朋友可以参考下。 1  首先要
  • Context和SQLiteOpenHelper创建数据库 百合不是茶 androidContext创建数据库
           一直以为安卓数据库的创建就是使用SQLiteOpenHelper创建,但是最近在android的一本书上看到了Context也可以创建数据库,下面我们一起分析这两种方式创建数据库的方式和区别,重点在SQLiteOpenHelper     一:SQLiteOpenHelper创建数据库:   1,SQLi
  • 浅谈group by和distinct bijian1013 oracle数据库group bydistinct
            group by和distinct只了去重意义一样,但是group by应用范围更广泛些,如分组汇总或者从聚合函数里筛选数据等。         譬如:统计每id数并且只显示数大于3 select id ,count(id) from ta
  • vi opertion 征客丶 macoprationvi
    进入 command mode (命令行模式) 按 esc 键 再按 shift + 冒号 注:以下命令中 带 $ 【在命令行模式下进行】,不带 $ 【在非命令行模式下进行】 一、文件操作 1.1、强制退出不保存 $ q! 1.2、保存 $ w 1.3、保存并退出 $ wq 1.4、刷新或重新加载已打开的文件 $ e 二、光标移动 2.1、跳到指定行 数字
  • 【Spark十四】深入Spark RDD第三部分RDD基本API bit1129 spark
      对于K/V类型的RDD,如下操作是什么含义?   val rdd = sc.parallelize(List(("A",3),("C",6),("A",1),("B",5)) rdd.reduceByKey(_+_).collect  reduceByKey在这里的操作,是把
  • java类加载机制 BlueSkator java虚拟机
    java类加载机制 1.java类加载器的树状结构 引导类加载器 ^ | 扩展类加载器 ^ | 系统类加载器 java使用代理模式来完成类加载,java的类加载器也有类似于继承的关系,引导类是最顶层的加载器,它是所有类的根加载器,它负责加载java核心库。当一个类加载器接到装载类到虚拟机的请求时,通常会代理给父类加载器,若已经是根加载器了,就自己完成加载。 虚拟机区分一个Cla
  • 动态添加文本框 BreakingBad 文本框
      <script>     var num=1; function AddInput() {      var str="";     str+="<input 
  • 读《研磨设计模式》-代码笔记-单例模式 bylijinnan java设计模式
    声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ public class Singleton { } /* * 懒汉模式。注意,getInstance如果在多线程环境中调用,需要加上synchronized,否则存在线程不安全问题 */ class LazySingleton
  • iOS应用打包发布常见问题 chenhbc iosiOS发布iOS上传iOS打包
    这个月公司安排我一个人做iOS客户端开发,由于急着用,我先发布一个版本,由于第一次发布iOS应用,期间出了不少问题,记录于此。   1、使用Application Loader 发布时报错:Communication error.please use diagnostic mode to check connectivity.you need to have outbound acc
  • 工作流复杂拓扑结构处理新思路 comsci 设计模式工作算法企业应用OO
    我们走的设计路线和国外的产品不太一样,不一样在哪里呢?  国外的流程的设计思路是通过事先定义一整套规则(类似XPDL)来约束和控制流程图的复杂度(我对国外的产品了解不够多,仅仅是在有限的了解程度上面提出这样的看法),从而避免在流程引擎中处理这些复杂的图的问题,而我们却没有通过事先定义这样的复杂的规则来约束和降低用户自定义流程图的灵活性,这样一来,在引擎和流程流转控制这一个层面就会遇到很
  • oracle 11g新特性Flashback data archive daizj oracle
    1. 什么是flashback data archive Flashback data archive是oracle 11g中引入的一个新特性。Flashback archive是一个新的数据库对象,用于存储一个或多表的历史数据。Flashback archive是一个逻辑对象,概念上类似于表空间。实际上flashback archive可以看作是存储一个或多个表的所有事务变化的逻辑空间。
  • 多叉树:2-3-4树 dieslrae 树
        平衡树多叉树,每个节点最多有4个子节点和3个数据项,2,3,4的含义是指一个节点可能含有的子节点的个数,效率比红黑树稍差.一般不允许出现重复关键字值.2-3-4树有以下特征:     1、有一个数据项的节点总是有2个子节点(称为2-节点)     2、有两个数据项的节点总是有3个子节点(称为3-节
  • C语言学习七动态分配 malloc的使用 dcj3sjt126com clanguagemalloc
    /* 2013年3月15日15:16:24 malloc 就memory(内存) allocate(分配)的缩写 本程序没有实际含义,只是理解使用 */ # include <stdio.h> # include <malloc.h> int main(void) { int i = 5; //分配了4个字节 静态分配 int * p
  • Objective-C编码规范[译] dcj3sjt126com 代码规范
      原文链接 : The official raywenderlich.com Objective-C style guide 原文作者 : raywenderlich.com Team 译文出自 : raywenderlich.com Objective-C编码规范 译者 : Sam Lau
  • 0.性能优化-目录 frank1234 性能优化
    从今天开始笔者陆续发表一些性能测试相关的文章,主要是对自己前段时间学习的总结,由于水平有限,性能测试领域很深,本人理解的也比较浅,欢迎各位大咖批评指正。 主要内容包括: 一、性能测试指标 吞吐量、TPS、响应时间、负载、可扩展性、PV、思考时间 http://frank1234.iteye.com/blog/2180305 二、性能测试策略 生产环境相同 基准测试 预热等 htt
  • Java父类取得子类传递的泛型参数Class类型 happyqing java泛型父类子类Class
      import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import org.junit.Test; abstract class BaseDao<T> { public void getType() { //Class<E> clazz =
  • 跟我学SpringMVC目录汇总贴、PDF下载、源码下载 jinnianshilongnian springMVC
      ----广告-------------------------------------------------------------- 网站核心商详页开发 掌握Java技术,掌握并发/异步工具使用,熟悉spring、ibatis框架; 掌握数据库技术,表设计和索引优化,分库分表/读写分离; 了解缓存技术,熟练使用如Redis/Memcached等主流技术; 了解Ngin
  • the HTTP rewrite module requires the PCRE library 流浪鱼 rewrite
    ./configure: error: the HTTP rewrite module requires the PCRE library. 模块依赖性Nginx需要依赖下面3个包 1. gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ ) 2. rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ ) 3. s
  • 第12章 Ajax(中) onestopweb Ajax
    index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/
  • Optimize query with Query Stripping in Web Intelligence blueoxygen BO
    http://wiki.sdn.sap.com/wiki/display/BOBJ/Optimize+query+with+Query+Stripping+in+Web+Intelligence and a very straightfoward video http://www.sdn.sap.com/irj/scn/events?rid=/library/uuid/40ec3a0c-936
  • Java开发者写SQL时常犯的10个错误 tomcat_oracle javasql
    1、不用PreparedStatements   有意思的是,在JDBC出现了许多年后的今天,这个错误依然出现在博客、论坛和邮件列表中,即便要记住和理解它是一件很简单的事。开发者不使用PreparedStatements的原因可能有如下几个:   他们对PreparedStatements不了解   他们认为使用PreparedStatements太慢了   他们认为写Prepar
  • 世纪互联与结盟有感 阿尔萨斯
    10月10日,世纪互联与(Foxcon)签约成立合资公司,有感。 全球电子制造业巨头(全球500强企业)与世纪互联共同看好IDC、云计算等业务在中国的增长空间,双方迅速果断出手,在资本层面上达成合作,此举体现了全球电子制造业巨头对世纪互联IDC业务的欣赏与信任,另一方面反映出世纪互联目前良好的运营状况与广阔的发展前景。 众所周知,精于电子产品制造(世界第一),对于世纪互联而言,能够与结盟
按字母分类: ABCDEFGHIJKLMNOPQRSTUVWXYZ其他
首页 - 关于我们 - 站内搜索 - Sitemap - 侵权投诉
版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.