es6中块级绑定和字符串总结

1、块级作用域

var变量提升

var不管在哪声明,都会被提升到当前作用域顶级声明的变量。也就是变量提升.如下例子,当condition为false

function getVaule(condition){
    if(condition){
        var value="blue"
        // 1 此处可以访问变量value值,值为blue
    }
    // 2 此处也可以访问变量value的值,置为undefinded
}

上面的例子,当condition为false时,位置2仍然可以访问变量value。但没有值。这个就是因为js中的变量提升。在预编译阶段,js引擎,已经将上面的函数修改为下面形式

function getVaule(condition){
    var value;
    if(condition){
       value="blue"
        // 1 此处可以访问变量value值,值为blue
    }
    // 2 此处也可以访问变量value的值,置为undefinded
}

块级声明

块级声明用与在指定块的作用域之后无法访问的变量

1/ {}之间
2/ 函数内部

let、const

  • 不会变量提升
  • 不可重复声明
  • 在声明之前不可访问变量,就算是type操作符也会引发错,误因为在预编译阶段,要么把变量提升到作用域顶部(var),要不放入临时性死区(let,const),访问临时性(TDZ)的变量会触发运行时的错误

const和let的不同处

  • const 不允许修改绑定,但允许修改值。

  • 在for循环,初始化变量使用const,在修改初始化变量值时会报错

  • 在for-in和for-of循环中,使用const时的行为和let相同。

     for(const key in object){
         console.log(key)
     }
    

    字符串和正则表达式

    es6新增的特性

  • "string".codePointAt(1) --字符串按位置提取的字符代码点。该方法接受的为码位单元而非字符串位置

  • String.fromCodePoint(134071) --字符串内某个字符的代码点

  • normalize() --

  • 正则表达式是u标志 --当对正则表达式设置了u标志,他的工作模式切换到针对字符,而不是针对码元。 可用育计算某个字符串的字节数

    // 此方法对于常字符串慎用,有性能问题,可以使用字符串的迭代器来操作
     function codeLength(text){
          const result=text.match(/[\s\S]/gu)
          return result?result.length:0
      }
      const length=codeLength("漳卅a")
    
  • includes() 给定文本存在于字符串的任意位置,返回true

  • startsWith() 给定文本存在于字符串的开始位置 返回true,否则返回false

  • endsWith() 给定文本存在于字符串的结束位置 返回true 否则返回false

    const text='hello world'
    text.includes(0) //true
    text.startsWith(hello) //true
    text.endsWith(ld) //true
    
  • repeat() 它接受一个参数作为字符串的重复次数,返回
    一个将初始字符串重复指定次数的新字符串

 ass.repeat(3) //assassass
  • 正则表达式y标志
  • flag

模板字面量

  • es6出来之前,多行字符串的权宜之计
var message="hello\
             string" // hello string
var message=[
    'hello',
    'world'
].join("\n) 
  • es6的模板字符串解决方案
 const message=`hello
world`                     //hello
                            world

es6中的所有空格,都是字符串中的内容。

  • 替换位
    es6中替换位,允许你将任何有效的js表达式嵌入到模板字符串中
let name = "Nicholas",
message = `Hello, ${name}.`; // hello Nicholas
  • 标签化模板
    标签模板不是模板,而是在字符串前的一个函数,可以用来对字符串模板进行处理
  const test1='12'
     const test2='23'
     let message=tag`hello world ${test1} 夯实 ${test2}`
     // 第一个参数 ['hello world',' 夯实','']
    // 参数 substitutions ['12','23']
    // 使用tag 标签将 模板字符串显示
     function tag(literals,...substitutions){
         let result;
        for(let i=0;i

你可能感兴趣的:(es6中块级绑定和字符串总结)