js运算符的特殊应用

  • 是否包含指定字符: ~
  • 取整: |
  • 取半: >>
  • 成长值评级: ||
  • 判断奇偶: &
  • 交换两个数字的值: ^=
  • 2的n次方: << 和 ** 1 << n-1
  • 是否是指定字符串开头: ! 和 ^
  • 字符串转数字: +
  • 转为 Boolean 值: !!
  • 转为数字类型:~~

1、是否包含指定字符: ~

~"str1".indexOf("str2")

//str1 被查找的字符串
//str2 查找的字符串
//如果 str1 不含有 str2 ,则返回数字 0 。

例子

var str1='abc';
var str2='a';
if(~str1.indexOf(str2)){
  console.log('有'+str2) //有a
}else{
  console.log('无'+str2)
}

2、取整: |

num | 0

//num为正数时,相当于Math.floor()向下取整
//num为负数时,相当于Math.ceil()向上取整
// |后面必须是0,是0达到的是取整的效果,不是0,相当于转换为二进制之后相加的结果
//(4|4)=4 即转换为二进制之后100 |100  相加得到100=4

例子

1.3 | 0 //1

3、取半: >>

num >> 1

//num 整数

例:求 50 的 1/2

50 >> 1 //25

4、成长值评级: ||

需求1:
成长值为5是1星;
成长值为10是2星;
成长值为12是3星;
成长值为15是4星;
其他都是0星。

({'5':1,'10':2,'12':3,'15':4}[val] || 0);

//val 成长值。

5、判断奇偶: &

num & 1      //num 整数

//例子
var num=3;
if (num & 1) {
    console.log("num是奇数"); //num是奇数
} else {
    console.log("num是偶数");
}

6、交换两个数字的值: ^=

方法1:使用位运行符:

var num1 = 1, num2 = 2;
num1 ^= num2;
num2 ^= num1;
num1 ^= num2;
console.log(num1,num2); //2 1

方法2:使用数组:

var num1 = 1, num2 = 2;
num1 = [num2, num2 = num1][0];
console.log(num1,num2); //2 1

7、2的n次方: << 和 **

方法1:使用位运行符:

1 << n-1        //2的n次方

//例子:2的3次方:
1<<3 //8

方法2:使用幂运行符:

 x**y    //x的y次方

//例:2的3次方:
2**3 //8

方法比较:

使用 << 的方式可以支持负数,** 需要用括号否则出错。
使用 ** 比较直观,没研究过 << 方法的任意数的任意次方的规律。

1<<3 //8
2**3 //8
-1<<3 //-8
-2**3 // 报错
-(2**3) //-8
3<<2 //12 错误
3**2 //9 正确

8、是否是指定字符串开头: ! 和 ^

!str1.indexOf("str2")

//例:

var str1='abc';
var str2='a';
if(!str1.indexOf(str2)){
  console.log('是开头')
}else{
  console.log('不是开头')
}

使用正则方式

/^a/.test('abc') //a开头,true
/c$/.test('abc') //c结尾,true

9、字符串转数字: +

+str

//例:

var str='123';
typeof(str) //string
typeof(+str) //number

10、转为 Boolean 值: !!

!!obj

//例:
!!'text' //true

 11、转为数字类型:~~

~~‘1’=1
~~true == 1
~~false == 0
~~"" == 0
~~[] == 0

~~undefined ==0
~~!undefined == 1
~~null == 0
~~!null == 1

 

转载于:https://www.cnblogs.com/lmjZone/p/9336882.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值