美文网首页
yanhaijing(2)

yanhaijing(2)

作者: 我是大队长_1342 | 来源:发表于2018-12-07 16:53 被阅读0次

https://yanhaijing.com/basejs/
1.表达式产生值,语句通常“做某些事情”
2.原始类型和对象区别
(1)每一个对象有一个独一无二的标志,并且仅和自己相等

 var obj1 = {};  // 一个空对象
 var obj2 = {};  // 另一个空对象
 obj1 === obj2;//false

(2) 原始类型值的属性无法更改,无法添加和移除属性。

   var str = 'abc';
  str.foo = 3; // try to create property `foo` ? no effect
   str.foo  // unknown property

3.undefined和null
#######undefined没有值
1)未初始化的

  var foo;
  foo;// undefined

2)读取不存在的属性

var obj = {}; // 空对象
obj.foo;//undefined

3)缺省的参数

function f(x) { return x }

########null没有对象
4.“包装对象”,就是分别与数值、字符串、布尔值相对应的Number、String、Boolean三个原生对象。

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"

Number、String和Boolean如果不作为构造函数调用(即调用时不加new),常常用于将任意类型的值转为数值、字符串和布尔值。

Number(123) // 123
String('abc') // "abc"
Boolean(true) // true

三种包装对象各自提供了许多实例方法。两种它们共同具有、从Object对象继承的方法:valueOf和toString

var str = 'abc';
str.length // 3

abc是一个字符串,本身不是对象,不能调用length属性。JavaScript 引擎自动将其转为包装对象,在这个对象上调用length属性。调用结束后,这个临时对象就会被销毁。这就叫原始类型与实例对象的自动转换。
等同于:

var strObj = new String(str)
// String {
//   0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"
// }
strObj.length // 3

5.typeof 和 instanceof
typeof 主要用于原始值,instanceof 主要用于对象
type操作数 结果
undefined 'undefined'
null 'object' null的类型是“object”。这是一个bug,但从没被修复,因为修复后会破坏现有的代码
Boolean value 'boolean'
Number value 'number'
String value 'string'
Function 'function'函数的类型是“function”而不是“object”。鉴于函数(类型为“function”)是对象(类型是对象)的子类型,这不是一个错误。
All other values 'object'

> var b = new Bar();  // 通过构造函数Bar创建对象
> b instanceof Bar  //true
> {} instanceof Object  // true
> [] instanceof Array  //true
> [] instanceof Object  // 数字是对象的子类型true

6.以下被理解成false
undefined, null
布尔: false
数字: -0, NaN
字符串: ‘’
7.二元逻辑运算符(短路运算——如果第一个操作数可以确定结果,第二个操作数将不被验证)

false && foo()   //foo()永远不会被调用
true  || foo()   //foo()永远不会被调用

二元逻辑运算符结果不一定是true/false:

 NaN && 'abc'   // NaN
 123 && 'abc'    //'abc'

'abc' || 123      //'abc'
  '' || 123        //123

8.JavaScript中的数字是真正的浮点数。
由于二进制表示的固有缺陷,以及有限的机器空间,我们不得不面对一个充满舍入误差的规范。

1 === 1.0  // true

9.字符串方法slice、trim、toUpperCase、indexOf

> 'abc'.slice(1)  // 复制子字符串
  'bc'
> 'abc'.slice(1, 2)
  'b'

> 'abc'.indexOf('b')  // 查找字符串
  1
> 'abc'.indexOf('x')
  -1

10.在严格模式下,this指向undefined;在非严格模式下,this的值是被称作全局对象(global object)(在浏览器里是window)
11.IIFE:模拟块级作用域
有时你想模拟一个块,例如你想将变量从全局作用域隔离。完成这个工作的模式叫做 IIFE

(function () {  // 块开始
    var tmp = ...;  // 非全局变量
}());  // 块结束

外面的括号用来阻止它被解析成函数声明;只有函数表达式能被立即调用。函数体产生一个新的作用域并使 tmp 变为局部变量
12.闭包
每个函数保持和函数体内部变量的连接,甚至离开创建它的作用域之后。例如:

function createIncrementor(start) {
    return function () {  // (*)
        return start++;
    }
}
var inc = createIncrementor(5);
inc();//5
inc();//6
inc();//7

13.检验属性是否在某一对象中
法1:'newProperty' in jane
法2:jane.newProperty !== undefined 读取不存在的属性的会得到undefined值
用delete删除属性
14.如果你引用一个方法,它将失去和对象的连接。解决办法是使用函数内置的bind()方法。它创建一个新函数,其this值固定为给定的值。

var jane = { 
name: 'Jane',

   
 describe: function () {
 
'use strict';

return 'Person named '+this.name;}

};
var func = jane.describe;
func();//TypeError: Cannot read property 'name' of undefined
var func2=jane.describe.bind(jane);
func2();//'Person named Jane'

15.in操作符可以作用在数组也可以作用在对象上

var arr = [ 'a', 'b', 'c' ];
'a' in arr;//true

16.正则表达式
1)test()

> /^a+b+$/.test('aaab')
true

2)exec()匹配和捕获组,返回的数组第一项(索引为0)是完整匹配,捕获的第一个分组在第二项(索引为1)

> /a(b+)a/.exec('_abbba_aba_')
[ 'abbba', 'bbb' ]

3)replace()搜索并替换

> '<a> <bbb>'.replace(/<(.*?)>/g, '[$1]')
'[a] [bbb]'

相关文章

网友评论

      本文标题:yanhaijing(2)

      本文链接:https://www.haomeiwen.com/subject/jntxhqtx.html