又是很久没有写博客了呢,其实本来已经规划了好几篇的,可是懒癌发作,以至于计划搁浅。
近来对未来担忧了起来,看见前端的面试笔试,一堆神奇的问题看得我是一脸懵逼,还有笔者对JavaScript的一些所谓高级用法我也不是很了解,于是就有了如今计划要写的一系列笔记, 《JavaScript高级程序设计》,这一篇就是第一记啦~ 下面开始列出我在阅读书籍的时候觉得比较有用处,值得注意的一些地方~
isNaN
isNaN() 可以检测变量是否可以转成数值,若不行则返回 ture,可行则false。
isNaN(10) //false
isNaN('11') //false
isNaN('123r') //true
如果检测的是一个object,isNaN会先调用Object的
valueOf()
方法,确定其是否可转,不行就再测试toString()
方法,再确认一遍。
数值转换
三个函数: Number()
, parseInt()
, parseFloat()
,
Number("12Hello world!12"); // NaN
Number(""); // 0
Number(' '); // 0
Number("0011"); // 11
Number(true); // 1
let ob = {valueof:()=>'ww',toString:()=>'213'};
Number(ob) // 213
parseInt('12www123') // 12 解析到非数字就掐断
parseInt(' ') // NaN
parseInt('22.5') // 22 解析到非数字之后就掐断,
parseInt("0xA",16); // 10 第二个参数指定进制
parseInt("070",8); // 56
parseFloat("1234blue"); // 1234 (整数)
parseFloat("0xA"); // 0
parseFloat("22.5"); // 22.5
parseFloat("22.34.5"); // 22.34
parseFloat("0908.5"); // 908.5
parseFloat("3.125e7"); // 31250000
+'123'
也能做到Number()
的功能
String
\n 换行符
\t 制表符
\b 空格符
\r 回车符
\f 换页符 // 不过没试出效果
\ ( ’ | ” | \ ) 转义符
toString 传参
let num = 10;
num.toString() // '10'
num.toString(2) // '1010'
num.toString(8) // '12'
num.toString(10) // '10'
num.toString(16) // 'a'
若怀疑变量可能为
null
或者为undefined
,调用toString()
可能会出错,这时候使用String()
则可以避免这种情况的发生。
let a = 10;
let b = true;
let c = null;
let d;
String(a) // '10'
String(b) // 'true'
String(c) // 'null'
String(d) // 'undefined'
当然转String还可以直接这样:
let str = a + "";
Object
初始化: let obj = new Object();
or let obj = {};
Object 都有的属性与方法
constructor 保存用于创建当前对象的函数,比如上面的
obj
的构造函数就是Object()
.hasOwnProperty(propertyName) 检查给定的属性在当前对象实例中(而不是在实例
的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例
如:o.hasOwnProperty(“name”))。
isPrototypeOf(object) 检查传入的对象是否是传入对象的原型
propertyIsEnumerable(propertyName) 检查给定的属性是否能够使用 for-in 语句
来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
toLocaleString() 返回对象的字符串表示,该字符串与执行环境的地区对应。
toString() 返回对象的字符串表示。
valueOf() 返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值
相同。
位操作
- 按位非(NOT) ~ 操作数的负值减 1。
~25 = -26
- 按位与(AND) & 位操作中均为1才为1.
1 & 1 = 1
1 & 0 = 0
0 & 0 = 0
- 按位或(OR) | 有1是1.
1 | 1 = 1
1 | 0 = 1
0 | 0 = 0
- 按位异或(OR) ^ 只有一个1才是1.
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 0 = 0
- 左移 <<
2 << 5 = 64 // 2 * 2^5 = 2 * 32 = 64
7 << 5 = 224 // 7 * 2^5 = 7 * 32 = 224
- 有符号位的右移 >>
2 >> 1 = 1 // 2 / 2 = 1
7 >> 1 = 3 // 7 / 2 = 3.5 (精度丢失就是3)
- 无符号位的右移 >>>
-2 >>> 1 = 2147483647 // 带符号位一起移动了
-7 >> 1 = 2147483644