js 两个小括号 ()() 的用法
JS正则表达式中小括号的应用
JS正则表达式中⼩括号的应⽤主要使⽤的有下⾯三种:1. (...)Grouping. Group items into a single unit that can be used with *, +, ?, |, and so on. Also remember the characters that match this group for use with later references.2. (?:...)Grouping only. Group items into a single unit, but do not remember the characters that match this group.3.(?=p) A positive lookahead assertion. 或(?!p) A negative lookahead assertion.⽤于测试的字符串:url(skins/default/images/index/default.png)红⾊字符为匹配上的结果第⼀种,⽤于普通分组,能记住匹配该分组的字符串,并且可以在以后通过\1的⽅式来引⽤所匹配到的分组eg: (\/)匹配url(skins/default/images/index/default.png)(\/)default\1匹配url(skins/default/images/index/default.png)第⼆种,⽤于分组,不记录匹配该分组的字符串eg: (?:\/)default匹配url(skins/default/images/index/default.png)第⼀、⼆两种⽅式匹配的结果⾥都包含有该分组匹配到的结果,在例⼦中是"/default"中的"/"第三种,只⽤于确定位置,最终结果⾥并不包含该括号匹配到的结果eg: (?!\/)default匹配url(skins/default/images/index/default.png)eg: default(?=\/)匹配url(skins/default/images/index/default.png)。
JS中的小括号,中括号,大括号
JS中的⼩括号,中括号,⼤括号
总的来说,JavaScript中⼩括号有五种语义,中括号有四种语义,⽽⼤括号也有四种语义。
⼩括号:
语义1,函数声明时参数表(形参)
语义2,和⼀些语句联合使⽤以达到某些限定作⽤(if、for等)
语义3,和new⼀起使⽤⽤来传值(实参)
语义4,作为函数或对象⽅法的调⽤运算符(如果定义了参数也可与语义3⼀样传实参)
语义5,强制表达式运算(常⽤有eval解析JSON和匿名函数⾃执⾏)
中括号:
语义1,声明数组
语义2,取数组成员
语义3,定义对象成员(可以不遵循标识符规则,可以以数字开头定义标识符)
语义4,取对象成员
⼤括号:
语义1,组织复合语句,这是最常见的
语义2,对象直接量声明(赋值对象)
语义3,声明函数或函数直接量赋值
语义4,结构化异常处理的语法符号(try...catch语句)
PS:(对于⼩括号语义5,强制表达式运算
1. function(){}() //匿名函数⽴即执⾏,语法分析期报错
2. {}.constructor //获取对象直接量的构造器,语法分析期报错
实际上是js的“语句优先”在作怪,即{}被理解成复合语句块⽽不是对象直接量或函数直接量的语义。
可使⽤众所周知的⽅法,加个强制运算符()转化为值即可。
3. 具体内容可参见/woshinia/article/details/18666223。
javascript小括号表达式
javascript⼩括号表达式javascript的⼩括号“()”表达式可以帮助我们把javascript语句组合分块并且每对⼩括号都会返回⼀个值且在同⼀语句中具有优先执⾏权。
例如:1 2 3 4var result, result2;result = 5 * (2 + 3); //这是⼀个表达式,分别进⾏了加法和乘法的运算,结果是25。
alert(result2); //result2等于undefined,声明变量时并未赋值。
下⾯的⼩括号表达式在此时并未执⾏,因为此时执⾏的alert操作是⼀个语句,下⾯的⼩括号表达式是另⼀语句,产⽣了两个语句,⼩括号只有在同⼀语句中才具有优先执⾏的权利。
(result2 = 6); //result2等于6。
javascript会先执⾏⼩括号内的运算,2+3=5并把5返回然后在执⾏⼩括号外的运算,也就是5*⼩括号返回的5,结果是25。
数学都学过,相信很容易理解。
⼩括号内不能声明变量并且不会改变括号内所执⾏语句的域。
例如:01 02 03 04 05 06 07 08 09 10 11 12function a() {(function_b() {});alert(_b); //程序会报错,_b并未声明}function b() {var_b;(_b = function() {});alert(_b); //结果是function () {}}a();b();alert(_b); //程序会报错,_b并未声明,上⾯b函数中的_b与此_b处不同的域。
⼩括号表达式可以执⾏多条语句,每条语句⽤逗号结束,会返回最后⼀条语句执⾏结果的返回值。
例如:1 2 3var a, b, c, result;result = (a = 1, b = 2, c = 3, a * (b + c)); //⼩括号内会依次执⾏a变量的赋值、b变量的赋值、c变量的赋值、b变量加c变量的结果乘以a变量的操作并把结果返回赋值给result变量。
javascript括号(小括号、中括号、大括号)的多义性。
声明:以下内容转自/thread-2463755-1-1.html,如需转载请注明出处。
小括号JavaScript中小括号有五种语义语义1,函数声明时参数表function func(arg1,arg2){// ...}语义2,和一些语句联合使用以达到某些限定作用// 和for in一起使用for(var a in obj){// ...}// 和if一起使用if(boo){//...}// 和while一起使用while(boo){// ...}// 和do while一起使用do{// ...}while(boo)注意:在与if、while及do while一起使用时小括号会将其中的表达式结果隐式的转换成布尔值。
见无处不在的隐式类型转换。
语义3,和new一起使用用来传值(实参)// 假设已经定义了类Person,它有两个字段姓名(name),年龄(age)var p1 =new Person('Jack',26);语义4,作为函数或对象方法的调用运算符(如果定义了参数也可与语义3一样传实参)// 假设已经定义了函数funcfunc();// 假设已经定义了对象obj,且拥有func方法obj.func();这里提下typeof运算符,有人喜欢这么使用请注意typeof后的小括号并非语义4(即不是函数调用),而是后面提到的语义5。
我使用typeof一般不加后面的小括号。
见具名函数的多种调用方式语义5,强制表达式运算function strToJson(str){ // eval 中字符串两旁加了强制运算符()var json = eval('(' + str + ')');return json;}关于语义5,大家最熟悉的莫过于使用eval解析JSON又如使用较多的是匿名函数自执行(function(){// ...})();注意,以上代码第1对小括号是语义5,第3对则是语义4。
js问号点操作符【?.??】(可选链双问号)
js问号点操作符【?.??】(可选链双问号)配置使⽤可选链?. 和双问号?? 语法⼀、什么是可选链https:///en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining当访问多层对象属性(⽐如 res.data.list)时,如果属性res.data为空,则会报引⽤错误为此我们不得不这么处理:let dataList = res && res.data && res.data.list看着⾮常不美观,今天介绍的新语法就是为了解决这种问题的 (可选链操作符?.)有了可选链,就可以对⼀个为null或者undefined属性安全引⽤:let dataList = res?.data?.list⼆、什么是双问号https:///en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operatorvalue1 ?? value2??在value1和value2之间,只有当value1为null或者undefined时取value2,否则取value1(0,false,""被认为是有意义的,所以还是取value1)const obj = {}const c_or_d = obj.c ?? 'd'console.log(c_or_d) // 'd'console.log(0 ?? 1) // 0console.log("" ?? "foo") // ""如何使⽤⾸先检查你的项⽬依赖中的babel版本,如果你的babel版本<7,那么很遗憾,你得先解决babel版本升级的问题。
如果是babel7以上的版本,可以添加以下2个devDependencies依赖:@babel/plugin-proposal-optional-chaining // 可选链@babel/plugin-proposal-nullish-coalescing-operator // 双问号后在.babelrc或者babel.config.js中这加⼊2个插件(plugins属性放在JSON顶层):{"plugins": ["@babel/plugin-proposal-nullish-coalescing-operator","@babel/plugin-proposal-optional-chaining"]}之后就可以愉快地使⽤了!。
js正则匹配运算符
js正则匹配运算符在JavaScript中,正则表达式是一种强大的工具,可以用来匹配文本中的模式。
在编写正则表达式时,我们经常需要匹配一些特定的字符,比如运算符。
在这篇文章中,我们将讨论如何使用JavaScript的正则表达式来匹配运算符。
首先,让我们看一下JavaScript中常见的运算符。
这些包括加号(+)、减号(-)、乘号()、除号(/)、等号(=)等。
我们还可以考虑一些特殊的运算符,比如逻辑与(&&)、逻辑或(||)等。
现在,让我们来看一下如何使用正则表达式来匹配这些运算符。
在JavaScript中,我们可以使用正则表达式的字符类来匹配特定的字符。
例如,要匹配加号,我们可以使用正则表达式`/\+/`。
这里的反斜杠用来转义加号,因为加号在正则表达式中有特殊的含义。
如果我们想要匹配任何一个运算符,我们可以使用字符集合`[...]`。
例如,要匹配任何一个加减乘除运算符,我们可以使用正则表达式`/[-+/]/`。
这将匹配任何一个加号、减号、乘号或除号。
如果我们想要匹配特定的一组运算符,我们可以使用管道符号`|`。
例如,要匹配加号和减号,我们可以使用正则表达式`/[-+]/`。
除了匹配单个字符外,我们还可以使用量词来匹配多个字符。
例如,如果我们想要匹配连续的加号,我们可以使用正则表达式`/\++/`。
总之,JavaScript的正则表达式提供了强大的工具来匹配文本中的运算符。
通过使用字符类、字符集合和量词,我们可以轻松地编写出能够匹配各种运算符的正则表达式。
这对于处理和分析包含运算符的文本非常有用,比如编写计算器或解析数学表达式。
希望本文能够帮助你更好地理解JavaScript中的正则表达式匹配运算符的方法。
双重括号用法
双重括号用法双重括号,又称双层括号,是一种特殊的语法标记,用于标记在某些语言和编程语言中变量的类型和函数的参数或返回值的类型。
双重括号的历史要追溯到20世纪50年代,当时,IBM在设计其第一台浮点处理器(FLP)时就使用了双重括号这一概念,在FLP的编程语言中,它的语法类似于C语言:它使用双重括号来标记变量和函数的类型,以便编译器能够正确地解析语句。
自FLP以来,双重括号就已经成为编程界的一个常见符号。
现今,双重括号得到了更为广泛的应用,它不仅可以用于标记变量和函数的类型,还可以用于标记对象的属性,以及模板语法中传递数据和运行指令。
例如,在JavaScript中,可以使用双重括号来访问对象的属性: var person = {naJohn”,age: 25};console.log(person.age); // 25console.log(); // John双重括号也可以用于创建模板语法,如此处的Python例子:name =John”print(“Hello {{name}}”)在模板语法中,双重括号内的值将会被替换为变量的值,以便生成最终的输出内容。
另外,双重括号还可以用于传递函数的参数,例如在JavaScript 中,可以使用双重括号为函数传递参数:function sayHello(name) {console.log(“Hello + name);}sayHello(“John”); // Hello John总而言之,双重括号在编程语言中有着广泛的应用,它可以用于标记变量和函数的类型,以及模板语法和函数参数传递。
它的语法与传统的括号有所不同,但是具有同样的重要性和地位。
此外,双重括号也可以用于标记对象的属性,这一概念也是非常重要的。
双重括号是一种特殊的符号,与传统的括号不同,它有着独特的功能和用途,可以帮助开发者更清晰准确地编程,从而节省时间和资源,提高编程效率。
javascript语法规则
javascript语法规则
JavaScript语法规则如下:
1. 变量声明:使用var、let、const关键字声明变量。
2. 标识符:使用字母、数字、下划线、美元符号组成,首字母不能是数字。
3. 语句与表达式:语句用于执行操作,表达式用于计算值。
语句以分号结束,表达式以值或变量结束。
4. 注释:双斜杠(//)表示单行注释,斜杠加星号(/*)与星
号加斜杠(*/)表示多行注释。
5. 数据类型:包括基本数据类型(Number、String、Boolean、Null、Undefined、Symbol)和复杂数据类型(Object)。
6. 操作符:用于计算值或操作数据,包括算术、比较、逻辑、赋值、位运算等操作符。
7. 函数:用于封装一些操作,为数据提供操作接口,函数可以接受参数并返回值。
8. 控制流程:包括条件语句(if、else、switch)、循环语句(for、while、do...while)、跳转语句(break、continue、return)。
9. 对象:JavaScript中的每个东西都是对象。
对象是由键值对
组成的,键是字符串类型,值可以是任意类型的数据。
对象可以扩展和修改。
10. 数组:数组是一种有序的列表,存储着一系列的值,每个
值都可以通过索引来访问。
11. Class:ES6新增了Class关键字,用于实现面向对象编程。
类定义了一组描述对象物理属性和方法的标准。
以上是JavaScript的一些基本语法规则,但实际上JavaScript 是一门灵活多变的语言,它有很多骚操作和技巧,需要不断的学习和实践才能写出优秀的代码。
小括号在js中的作用
小括号在js中的作用小括号在JavaScript中的作用小括号(())在JavaScript中被广泛使用,它具有多种作用。
本文将为您详细介绍小括号在JavaScript中的几个重要作用。
1. 函数调用和参数传递小括号在JavaScript中最常见的作用是用于函数调用和参数传递。
当我们调用一个函数时,需要在函数名后加上小括号,以表示函数的执行。
同时,我们可以将参数放在小括号内,以向函数传递参数。
例如:```function sayHello(name) {console.log("Hello, " + name + "!");}sayHello("John"); // 输出:Hello, John!```在上述代码中,我们通过在函数名`sayHello`后加上小括号,并将参数`"John"`放在小括号内,来调用函数`sayHello`并传递参数。
2. 控制语句中的条件判断小括号还被广泛用于控制语句中的条件判断。
在if语句、for循环、while循环等控制语句中,我们需要在条件表达式中使用小括号来明确判断条件的优先级和逻辑关系。
例如:```if (score >= 60 && score < 90) {console.log("及格");}```在上述代码中,小括号将条件`(score >= 60 && score < 90)`括起来,表示将这个条件作为整体进行判断。
3. 数组访问和方法调用小括号还可以用于数组访问和方法调用。
当我们需要访问数组中的某个元素时,可以使用小括号将元素的索引括起来。
例如:```var fruits = ["apple", "banana", "orange"];console.log(fruits[0]); // 输出:apple```在上述代码中,`fruits[0]`用小括号将索引`0`括起来,表示访问数组`fruits`中的第一个元素。
javascript 中(function{})()这种写法什么意思?
最近在整理javascript 学习,发现这个问题了,在网上发现这么个解释最清楚最明白;(function(){})()相当于先定义 function xx(){},后调用 xx();()是最高优先级的,所以先执行function(){},这个定义了一个匿名函数,等于xx=function(){}接着就是调用xx()了;给个例子JScript codefunctionf1(a){ alert(a);}functionf2(a){ returnfunction(){ alert(a); }}这里的var x=f2 就等于把函数传递给了f2,然后要执行这个函数,就必须加() 也就是x();也就是f2()还是(function f2(a){return function(){alert(a);})();另外还有一个问题就是命名空间的问题YY = YY||{};---声明一个叫YY的命名空间(定义一个全局的变量)(function() {ng=function() {------声明一个叫ng的命名空间(通过全局变量的增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果)isUndefined: function(o) {return typeof o === 'undefined';},isString: function(o) {return typeof o === 'string';}};})();---调用方法alert(ng.isString('test me'));这时候就有人不明了,楼上为什么要加(function() { 和)(); 最外面的这两行,有什么用啊?J Script codeYY=YY||{}; //---声明一个叫YY的命名空间(定义一个全局的变量)//(function() { ng=function() {//------声明一个叫ng的命名空间(通过全局变量的增加属性的方式把闭包里的对象传到全局变量中,实现代码封装的效果)isUndefined:function(o) {returntypeofo==='undefi ned'; },isString:function(o) {returntypeofo==='string'; } }; }//)();//---调用方法alert(ng.isString('test me'));疑问在这:注释掉这两行有什么不一样的呢?不就是申明吗,为什么要用()()执行一下啊?答:(functionaa(){..};//只是定义了一个叫aa的函数,但是并没有执行alert(ng.isString('test me'));//执行的时候会报找不到isString的方法。
js语法规则运算符
js语法规则运算符JavaScript(简称JS)是一种广泛应用于网页开发的脚本语言,它可以为网页增加动态功能和交互性。
在JS中,运算符是一种用于执行各种操作的特殊符号。
本文将介绍一些常见的JS运算符及其语法规则。
1. 算术运算符算术运算符用于执行基本的数学运算,包括加法(+)、减法(-)、乘法(*)、除法(/)和取余(%)。
例如,表达式2 + 3将返回5,表达式10 % 3将返回1。
2. 赋值运算符赋值运算符用于将值赋给变量。
最常见的赋值运算符是等号(=)。
例如,x = 5将把值5赋给变量x。
此外,还有一些复合赋值运算符,如+=、-=、*=和/=。
例如,x += 3等同于x = x + 3。
3. 比较运算符比较运算符用于比较两个值,并返回一个布尔值(true或false)。
常见的比较运算符包括相等(==)、不相等(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。
例如,表达式5 > 3将返回true,表达式10 == "10"将返回true(因为它们的值相等)。
4. 逻辑运算符逻辑运算符用于组合和操作布尔值。
常见的逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。
例如,表达式x > 0 && x < 10将返回true(当x的值大于0且小于10时),表达式!(x > 0)将返回false(当x的值小于等于0时)。
5. 条件运算符条件运算符(也称为三元运算符)是一种简洁的语法,用于根据条件选择不同的值。
它的语法是condition ? value1 : value2。
如果条件为true,则返回value1;如果条件为false,则返回value2。
例如,表达式x > 0 ? "正数" : "负数"将根据x的值返回不同的字符串。
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
JS使⽤正则表达式获取⼩括号、中括号及花括号内容的⽅法⽰例本⽂实例讲述了JS使⽤正则表达式获取⼩括号、中括号及花括号内容的⽅法。
分享给⼤家供⼤家参考,具体如下:正则表达式的() [] {}有不同的意思。
() 是为了提取匹配的字符串。
表达式中有⼏个()就有⼏个相应的匹配字符串。
(\s*)表⽰连续空格的字符串。
[]是定义匹配的字符范围。
⽐如 [a-zA-Z0-9] 表⽰相应位置的字符要匹配英⽂字符和数字。
[\s*]表⽰空格或者*号。
{}⼀般⽤来表⽰匹配的长度,⽐如 \s{3} 表⽰匹配三个空格,\s[1,3]表⽰匹配⼀到三个空格。
(0-9) 匹配 '0-9′本⾝。
[0-9]* 匹配数字(注意后⾯有 *,可以为空)[0-9]+ 匹配数字(注意后⾯有 +,不可以为空){1-9} 写法错误。
[0-9]{0,9} 表⽰长度为 0 到 9 的数字字符串。
⼩括号是⽤于将基本的单元合成⼀个⼤的单元,⽽中括号就是将多个基本单元组成⼀个选择域,表⽰其中⼀个的意思。
例⼦:⼩括号例⼦1、我们想匹配123这个整体(123)就是匹配"123"这个整体,⼤括号⽽[123]就是匹配1/2/3(1或者2或者3)再举个⼩编碰到的⼀个问题例如我们想匹配 多个替换<p> </p>中间多个 的时候先⽤中括号[]<p>[ ]*</p>匹配内容的就如下图所⽰那下⾯⽤⼩括号试试()<p>( )*</p>就是我们预想的效果。
其实匹配的正则⽐较好的是这个,⾥⾯万⼀空字符肯定就不⾏了<p>(\s|\ \;| | | c2 a0)*</p>JS 正则表达式获取⼩括号中括号花括号内的内容<!DOCTYPE html><html><head><meta charset="utf-8" /><title> JS获取括号内容</title></head><body><script type="text/javascript">var str="123{xxxx}456[我的]789123[你的]456(1389090)789";var regex1 = /\((.+?)\)/g; // () ⼩括号var regex2 = /\[(.+?)\]/g; // [] 中括号var regex3 = /\{(.+?)\}/g; // {} 花括号,⼤括号// 输出是⼀个数组console.log(str.match(regex1));console.log(str.match(regex2));console.log(str.match(regex3));</script></body></html>附:JAVA正则匹配语句regex = "(?<=\\[)(\\S+)(?=\\])"PS:这⾥再为⼤家提供2款⾮常⽅便的正则表达式⼯具供⼤家参考使⽤:更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家JavaScript程序设计有所帮助。
javascript中的括号()用法小结
javascript中的括号()⽤法⼩结(1+2)*3 与数学运算中保持⼀致,先计算1+2再乘以3得出9同时也可以是其他表达式,如:复制代码代码如下:(a+(function(i){return i}(2)))*c复制代码代码如下:function fun(a,b,c){//…}复制代码代码如下:(function fun(a,b,c){//…})(1,2,3)这⾥的括号(1,2,3)中的参数对应的是前⾯函数的参数,当第⼀个括号的代码符合表达式规则时,前⾯的代码会被作为函数表达式来执⾏,所以最好在第⼀个函数表达式前⾯加上“;”分隔开,否则会报前⼀个表达式的值不是函数的错误。
如:alert(1)(function(){})(),此时alert(1)先执⾏,由于符合⽴即执⾏的函数表达式规则,所以alert(1)的返回值会被作为函数,同时将后⼀个括号中的值作为参数传⼊,但alert(1)返回的是undefined,所以会报错。
解决办法就是在alert(1)后⾯加上“;”或者“,”,将其拆分为两个表达式。
⽴即执⾏还可以⽤复制代码代码如下:(function fun(a,b,c){//…}(1,2,3))!function fun(a,b,c){//…}(1,2,3)void function fun(a,b,c){//…}(1,2,3)等⽅式,只要函数符合函数表达式语法规则即可。
单独执⾏⼀个函数时也需要加括号,不能省略,如:fun(),fun(1,2,3),并返回最后⼀个表达式的值,多个表达式之间需要⽤逗号“,”分隔开复制代码代码如下:(1,2+3,4+5,6)//代码会被⼀次执⾏,最后将6作为返回值,与4类似,但⽤于条件判断中复制代码代码如下:if(a+b==c){} //if 和 { 之间的内容需放⼊括号中。
JS的可选链操作符(?.)与双问号(??),你用到了吗?
JS的可选链操作符(?.)与双问号(??),你⽤到了吗?可选链操作符(?.)以前⼀般这样使⽤:let nestedProp = obj.first && obj.first.second;或者这样:let temp = obj.first;let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);现在我们这样使⽤:let nestedProp = obj.first?.second; // 访问属性let result = someInterface.customMethod?.(); // 调⽤⽅法let nestedProp = obj?.['prop' + 'Name']; // 表达式let arrayItem = arr?.[42]; // 访问数组详细使⽤可参考:双问号(??)语法:leftExpr ?? rightExpr在leftExpr和rightExpr之间,只有当leftExpr为null或者 undefined时取rightExpr,否则取leftExpr(0,false,""被认为是有意义的,所以还是取leftExpr)以前这样使⽤:let foo;let someDummyText = foo || 'Hello!';基础⽰例:const nullValue = null;const emptyText = ""; // falsyconst someNumber = 42;const valA = nullValue ?? "default for A";const valB = emptyText ?? "default for B";const valC = someNumber ?? 0;console.log(valA); // "default for A"console.log(valB); // "" (as the empty string is not null or undefined)console.log(valC); // 42特殊⽰例:null || undefined ?? "foo"; // raises a SyntaxErrortrue || undefined ?? "foo"; // raises a SyntaxError(null || undefined) ?? "foo"; // returns "foo"详细使⽤可参考:⼯程中怎样使⽤babel7以上版本⽀持,可以添加以下2个devDependencies依赖:@babel/plugin-proposal-optional-chaining // 可选链@babel/plugin-proposal-nullish-coalescing-operator // 双问号在.babelrc或者babel.config.js中这加⼊2个插件(plugins属性放在JSON顶层):{"plugins": ["@babel/plugin-proposal-nullish-coalescing-operator","@babel/plugin-proposal-optional-chaining"]}。
JavaScript中的??和?.和??=操作符
JavaScript中的??和?.和??=操作符JS中两种不常使⽤但挺实⽤的操作符:??和?.⼀起来了解并学会使⽤它们吧:空值合并操作符:??只有当操作符左侧为null或undefined时才会返回操作符右侧的值,否则返回左侧的值。
eg:null ?? 'hello';// helloundefined ?? 'hello';// hellofalse ?? 'hello';// falsenull ?? undefined;// undefinednull ?? undefined ?? 123;// 123可以⽤于程序中当某个值为null或undefined时给它赋默认值。
if表达式或者逻辑或||操作符也能实现这个赋默认值,区别于逻辑或操作符的是:逻辑或是当操作符左侧为假值(null、undefined、false、0、''等等)时返回操作符右侧的值,否则返回左侧的值null || 'hello';// hellofalse || 'hello';// hello0 || 'hello';// hellotrue || 'hello';// true空值赋值操作符:??=x ??= y等价于x = (x ?? y)var x = undefined;var y = 1;x ??= y;// 1可选链操作符:?.var obj = {};console.log(.firstName);这个情况下会出现报错:这是程序中经常会遇见的报错,通常会在上⾯加⼀层if判断或者使⽤&&与操作符来处理这种异常现在可以使⽤?.操作符来处理var obj = {};console.log(?.firstName);// undefined可选链?.操作符⽤于读取链中的属性值,⽽不必明确每个值都有效,区别于(.)操作符加了⼀层异常的处理,避免程序的报错和表达式的执⾏短路。
js中逻辑运算符的使用
js中逻辑运算符的使用在JavaScript中,逻辑运算符用于组合和比较布尔值。
以下是常见的逻辑运算符及其使用:1. 逻辑与(&&):将两个表达式连接起来,只有当两者都为真时,结果才为真。
例如:javascriptvar x = 5;var y = 10;if (x > 0 && y > 0) {console.log("Both x and y are positive");}2. 逻辑或():将两个表达式连接起来,只要其中一个为真,结果就为真。
例如:javascriptvar x = 5;var y = 10;if (x > 0 y > 0) {console.log("Either x or y is positive");}3. 逻辑非(!):用于取反一个布尔值,如果表达式为真,则结果为假;如果表达式为假,则结果为真。
例如:javascriptvar x = 5;var y = 10;if (!(x > y)) {console.log("x is not greater than y");}此外,逻辑运算符可以与其他运算符结合使用,例如:- 条件运算符(三元运算符):用于根据一个条件选择两个表达式中的一个。
例如:javascriptvar x = 5;var result = (x > 0) ? "Positive" : "Negative";console.log(result);- 短路运算符:逻辑与(&&)和逻辑或()在执行时具有短路的特性。
短路运算符只在需要计算的最小表达式上执行。
例如:javascriptvar x = 5;var y = 10;var result = (x > 0 && y++ > 0); 因为x > 0为真,所以y++ > 0这个表达式不会计算console.log(y); 输出10,y的值没有改变这些逻辑运算符可以用于控制程序的流程和执行条件。
浅谈JS正则表达式的RegExp对象和括号的使用
浅谈JS正则表达式的RegExp对象和括号的使⽤RegExp对象的创建:常规的正则表达式的创建可⽤直接量,即斜杠 “/” 括起来的字符。
但在要求参数变化的环境下,RegExp()构造函数是更好的选择:var reg1 = /'\w+'/g; var reg2 = new RegExp('\'\\w+\'','g');对⽐两种创建⽅式,RegExp中的第⼀个参数为要创建的正则字符串,⼀⽅⾯注意,因为不是直接量的表⽰形式,因此不⽤斜杠“ / ”括起来了;⽽是字符串中必须要对引号“ ‘ ”和转义符号“ \ ”进⾏⼆次转义。
此外,⽆论是直接量还是RegExp()构造函数,都是⽣成了新的RegExp对象,并将其赋值给变量。
match()与exec()的异同:match和exec是正则表达式匹配字符串的常⽤⽅法。
两者实现的功能差不多,有些细微的区别:1、使⽤⽅式match是字符串包装对象的⽅法,⽤法:String.match(RegExp);exec是正则表达式对象的⽅法,⽤法:RegExp.exec(String);2、返回的结果当RegExp没有设置全局标志 "g" 时:两者的返回结果相同。
即⽆匹配值时返回null,有匹配值时返回⼀个数组(令array)。
array[0]为匹配的字符串,array[1]、array[2]……则对应为正则表达式中圆括号匹配的⼦字符串$1、$2……。
同时数组带有两个属性,array.index表⽰匹配字符串的初始位置,array.input表⽰正在检索的字符串。
当RegExp有设置全局标志 "g" 时:match在有值时返回⼀个数组array。
数组的每项依次表⽰匹配到的所有的字符串,因此不再有圆括号匹配的⼦字符串了。
此时数组没有index属性和input属性。
exec则与没有全局标⽰ "g" 的表现⽆异。
JS中关于事件处理函数名后面是否带括号的问题
JS中关于事件处理函数名后⾯是否带括号的问题今天总结⼀个关于事件处理程序的⼩细节。
⾸先回顾⼀下事件处理的⼀些概念。
JS中的事件处理(事件绑定)就是让某种或某些事件触发某些活动。
有两种常见的形式,分别是DOM Level 0 和DOM Level 2。
这两种⽅式最⼤的区别就在于DOM 0级事件处理只能⽤于事件冒泡,⽽DOM 2级事件处理却可以通过设置第三个参数来分别⽀持事件冒泡和事件捕获。
DOM 0级事件处理⼀般是直接把⼀个函数分配给⼀个事件处理程序,既可以在元素中直接分配⼀个事件处理程序,如⽅式⼀所⽰;也可以在脚本中把函数分配给事件处理程序,如⽅式⼆所⽰。
<!--⽅式⼀--><div onclick="fun1();fun2('world!');"></div><!--⽅式⼆--><div id="a">点我</div><script>var a=document.getElementById("a");a.onclick=fun1; //⽅式⼆function fun1(){alert("hello!");}function fun2(cc){alert(cc);}</script>这两种⽅式的区别在上述⽰例中也显⽰了,第⼀种⽅式可以同时绑定多个处理函数,但要注意必须是全局函数,否则会抛出Reference错误。
第⼆种⽅式只能⼀次绑定⼀个处理函数,否则新的函数会覆盖旧的函数。
DOM 2级事件处理不会直接绑定处理函数,⽽是将函数添加为⼀个事件监听器如下,他也可以绑定多个处理函数,不会产⽣覆盖。
但这种⽅式存在浏览器兼容的问题,IE下必须⽤attachEvent⽅法代替。
a.addEventListener("click",fun1,false); //事件冒泡a.addEventListener("click",anotherFun,false); //不会覆盖上⼀事件,均被执⾏ 简单回顾到这⾥,⾔归正传,不知道在回顾的过程中⼤家有没有注意到⼀个令⼈困惑的⼩细节,就是引⽤函数的时候,函数名称后⾯有的时候加括号,有的时候不加括号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
js 两个小括号 ()() 的用法.txt爱情是彩色气球,无论颜色如何严厉,经不起针尖轻轻一刺。
一流的爱人,既能让女人爱一辈子,又能一辈子爱一个女人!js 两个小括号 ()() 的用法
文章分类:Web前端
JavaScript 中,考查如下代码:
Js代码
(function()
{
alert("cftea");
})();
(function()
{
alert("cftea");
})();
其实这段代码的意思就是执行这个匿名函数,弹出提示框,内容为“cftea”。
可以把上述代码理解为:
Js代码
function foo()
{
alert(1);
}
foo();
function foo()
{
alert(1);
}
foo();
其实相同的功能还有另外两种写法,我们一并列出来如下:
Js代码
function foo()
{
alert("cftea");
}
foo();
(function()
{
alert("cftea");
})();
(function()
{
alert("cftea");
}());
void function()
{
alert("cftea");
}()
function foo()
{
alert("cftea");
}
foo();
(function()
{
alert("cftea");
})();
(function()
{
alert("cftea");
}());
void function()
{
alert("cftea");
}()
用途
说了这么多,这东西到底有什么用呢?它可以立即执行一段代码,并把结果赋给变量;打破我们常规的先写函数,再调用的流程,简化书写。
Js代码
ajax.xmlhttp = (...)();
ajax.xmlhttp = (...)();
例子:
Js代码
function Foo() {
var a = 123;
this.a = 456;
(function() {
alert(a); // 123
alert(this.a); // undefined
})();
}
var f = new Foo();
function Foo() {
var a = 123;
this.a = 456;
(function() {
alert(a); // 123
alert(this.a); // undefined
})();
}
var f = new Foo();
以上代码,先显示 123,再显示 undefined,说明 alert(this.a); 这句中 this 是指本function 的,而不是其外部 function 的。
如果要使用外部的成员,可使用参数的形式传入:
Js代码
function Foo() {
var a = 123;
this.a = 456;
(function(a) {
alert(a); // 456
})(this.a);
}
var f = new Foo();
function Foo() {
var a = 123;
this.a = 456;
(function(a) {
alert(a); // 456
})(this.a);
}
var f = new Foo();
很好理解,再看看下面的:
Js代码
function Foo() {
var a = 123;
this.a = 456;
(function() {
alert(a); // 123
alert(this.a); // undefined
this.b = 789;
})();
(function() {
alert(this.b); // 789
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
})();
同样是先显示 123,然后显示 undefined,然后显示 789,最后又是一个 789。
这说明用两个小括号括起来的都是位于一个执行上下文中的,不论这些代码放在哪里。
再看看:
function Foo() {
(function() {
this.b = 789;
})();
(function() {
alert(this.b); // 789
var b = 0;
alert(b); // 0
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
alert(b); // 789
})();
令人意外的是,最后一个 alert(b),结果仍然是 789。
更深入一步:
function Foo() {
(function() {
this.b = 789;
})();
(function() {
alert(this.b); // 789
alert(b); // undefined
var b = 0;
alert(b); // 0
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
alert(b); // 789
})();
function Foo() {
var a = 123;
this.a = 456;
(function() {
alert(a); // 123
alert(this.a); // undefined
this.b = 789;
})();
(function() {
alert(this.b); // 789
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
})();
同样是先显示 123,然后显示 undefined,然后显示 789,最后又是一个 789。
这说明用两
个小括号括起来的都是位于一个执行上下文中的,不论这些代码放在哪里。
再看看:
function Foo() {
(function() {
this.b = 789;
})();
(function() {
alert(this.b); // 789
var b = 0;
alert(b); // 0
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
alert(b); // 789
})();
令人意外的是,最后一个 alert(b),结果仍然是 789。
更深入一步:
function Foo() {
(function() {
this.b = 789;
})();
(function() {
alert(this.b); // 789
alert(b); // undefined
var b = 0;
alert(b); // 0
})();
}
var f = new Foo();
(function() {
alert(this.b); // 789
alert(b); // 789
})();
从上,我们可以看出,取值时、没有加 this 时:如果当前 () 中不存在同名的局部变量,则等同于加 this 处理;如果当前 () 中存在同名的局部变量,则按常规处理。