六章前-笔记


typeof null === 'object' // true

null instanceof Object  // false



// with  和 try/catch 的区别? 

with 语句, 会向作用域链前端添加指定的对象;
catch语句, 会创建一个新的变量对象,这个变量对象包含要抛出的错误对象的声明;



变量声明:

注意: 未经声明而初始化变量时Javascript 编程中一个非常常见的错误,会导致很多问题。
      为此,读者在初始化变量之前一定要先声明变量。在严格模式下,未经声明就初始化变量会报错。


什么是块级作用域?
由最近的一对包含花括号{}界定的。 function 、if 、 while 甚至连单独的块也是let 声明变量的作用域。



我如果想让整个对象都不能修改? 怎么做呢? 
Object.freeze(obj)

// 如: 
obj1 = {
  internal: {}
};

 Object.freeze(obj1);
obj1.internal.a = 'aValue';

console.log(obj1.internal.a) // aValue

// 这没有浅冻结。
// 被冻结对象自身的所有属性都不可能以任何方式被修改。任何修改尝试都会失败,无论是静默地还是通过抛出TypeError异常
// 如果一个属性的值是个对象,则这个对象中的属性是可以修改的,除非它也是个冻结对象。数组作为一种对象,被冻结,其元素不能被修改。没有数组元素可以被添加或移除。




// 深冻结函数.
function deepFreeze(obj) {

  // 取回定义在obj上的属性名
  var propNames = Object.getOwnPropertyNames(obj);

  // 在冻结自身之前冻结属性
  propNames.forEach(function(name) {
    var prop = obj[name];

    // 如果prop是个对象,冻结它
    if (typeof prop == 'object' && prop !== null)
      deepFreeze(prop);
  });

  // 冻结自身(no-op if already frozen)
  return Object.freeze(obj);
}


// 那什么是垃圾回收呢? 

// 答: 我个人认为, 垃圾回收就是执行环境负责在代码执行时管理内存。

// 垃圾回收的基本思路?

// 答: 确定那个变量不会再使用, 然后释放他占用的内存。这个过程是周期性的,即垃圾回收程序每隔一定时间(或者是代码执行过程中2个预定的手机时间)就会自动运行。

// 垃圾回收的策略?

// 1. 标记清除
   //  先给当前不使用的值加上标记。 再回来回收他们的内存。
// 2. 引用计数
    // 需要记录值引用了多少次。使用一次减一, 当值为0的时候, 回收他们。
    // 代码如果存在循环引用时会出现问题。
// 3. 解除变量的引用不仅可以消除循环引用,而且对垃圾回收也有帮助,为促进内存回收,全局对象,全局对象的属性和循环引用都应该不需要时解除引用。

// 什么是内存泄漏? 
    1. 函数会被多次引用的情况下
    2. 定时器如果一运行,占用着外面的属性。垃圾回收程序就不会清理外部的变量。
    3. 闭包。
    
// 如何解决内存泄漏?

// 1. 定时器,不使用的时候清除。
// 2. 把不使用的函数设置成null


// Date

Date.parse("May 23, 2019"); // 方法接受一个表示日期字符串参数, 尝试将这个字符串转换为表示该日期的毫秒数。
Date.UTC('年','月','日','时','分','秒') // Number 


// 如何计算函数执行时间。
// 起始时间
let start = Date.now();
// 调用函数
doSomething();
//结束时间
let stop = Date.now();
result = stop - start;


// 字符串位置方法

let stringValue = "hello word";
conosole.log(stringValue.indexOf('o'))
conosole.log(stringValue.lastIndexOf('o'))



let message = 'barsssarsssmm';
message.includes('bars'); // true


message.trim() // 删除前后字符串空格

message.repeat(2) // 接受一个整数参数, 表示将字符串复制多少次

// 字符串迭代与解构
for (const c of 'abcdef') { // for - of 会按顺序访问每个字符
    console.log(c)
}

// 解构操作符
console.log([...message])


// 字符串大小写转换

1. toLowerCase() // 小写
2. toLocaleLowerCase() // 如果不知道代码设计什么语言, 最好使用地区特定的转换方法 小写
3. toUpperCase() // 大写
4. toLocaleUpperCase() // 特定地区 大写


// 字符串替换
replace()

replaceAll()

// 匹配所有对应的'sm', 替换成 gm
replace(/sm/g,'sssssss')

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容