Js 学习笔记: 两个感叹号 + Object.jeys() +判断存在 + 判空

1.JS判断字符串是否为整数–简单的正则判断

var r = /^\+?[1-9][0-9]*$/;  //正整数
String str = "123";
boolean flag=r.test(str);

如果判断为正整数,则flag为true
本正则表达式考自:https://blog.csdn.net/l912943297/article/details/53993845

2.js 两个感叹号 !!:

作用:将oObject强制转换为布尔值。 如果它是假的(例如0,null,undefined等),则为false,否则为true。

!oObject //反转布尔值
!! oObject //非反向布尔值所以真正的布尔表示
所以!! 不是运算符,只是! 操作员两次。

3.css里的空格:

.table .body 有空格是指父子组件,即class=table的子组件里class=body的
.table.body 没有空格是指既是table又是body的class:即class=“table body”

4.js异常: Uncaught RangeError: Maximum call stack size exceeded:
常见情况:错误直译过来就是“栈溢出”,出现这个错误的原因是因为进行了递归运算,但是忘记添加判断条件,导致递归无线循环下去。解决方法是:给递归运算加终止条件
想深入了解下的话可以看:https://stackoverflow.com/questions/6095530/maximum-call-stack-size-exceeded-error

另一种不常见的情况:两个js库相互调用引起的:https://www.cnblogs.com/amosleaf/archive/2012/04/19/2457441.html

5.Object.keys():

返回 一个表示给定对象的所有可枚举属性的字符串数组。

// simple arrayvar arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// array like objectvar obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

// array like object with random key orderingvar anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

6.element.style覆盖了我的样式!!

解决方法参考:https://blog.csdn.net/hi_dzj/article/details/7092032
使用 !autoimportant来表示我的样式特别重要!

.table-list .table-cont .table .selection {
    /*使用!important 提高这个样式的重要度,不然下拉框自带的width是固定值400px,无法根据屏幕的宽度自适应*/
    width: auto !important;
}

7.js的扩展运算符

扩展运算符( spread )是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
举例:

function push(array, ...items) {
    array.push(...items);
}
function add(x, y) {
    return x + y;
}
var numbers = [4, 38];
add(...numbers) // 42

8.js中如何判断一个值是否在数组中:

Array对象有一个indexOf方法,如果存在返回元素的位置,如果不存在返回-1

9.如何判断Javascript对象是否存在:

一句话概括:可以使用typeof运算符,判断myObj是否有定义:

if (typeof myObj == "undefined") { // 使用===精确比较也可以得到正确的值,但稍有不同,==是判空时候最常用的
  var myObj = { };
}

上面是目前使用最广泛的判断javascript对象是否存在的方法。
很详细的介绍:http://www.ruanyifeng.com/blog/2011/05/how_to_judge_the_existence_of_a_global_object_in_javascript.html

console.log("判空:"); // abc、data.aaa都没有定义过
console.log(typeof abc == "undefined"); // 输出true
console.log(typeof data.aaa == "undefined"); // 输出true

10.js里判断数组或者对象中的key是否存在:

ary.hasOwnProperty(key); 或 obj.hasOwnProperty(key);

11.let和var的区别:

let所声明的变量,只在let命令所在的代码块内有效。

{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。
for循环的计数器,就很合适使用let命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值