我是靠谱客的博主 拼搏发带,最近开发中收集的这篇文章主要介绍【JS】String字符串转义字符转换为字符串模板字符串方法编码eval(),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

字符串

  • 字符串的内部格式始终是 UTF-16,它不依赖于页面编码

  • 字符串是不可变的,只能通过拼接重新赋值

  • 字符串的原型上暴露了一个 [Symbol.iterator]() 方法

  • es6之前只支持两字节的字符,不支持四字节的字符

    • es6提供了大括号可以解决

      'u{1F680}' === 'uD83DuDE80'
      // true
      
  • charAt() :返回给定索引位置的字符,功能同[]

  • charCodeAt() :返回指定索引的字符编码

    • 四个字节由 codePointAt() 替换
  • fromCharCode():根据参数编码返回字符

    • 四字节由 fromCodePoint() 替换

转义字符

转义
n换行
t制表
b退格
r回车
f换页
\反斜杠
单引号
‘’双引号
`反引号
xnn十六进制 nn 表示的字符
unnnn十六进制 nnnn 表示的 Unicode 字符

转换为字符串

  • toString():几乎所有值都有的 toString() 方法( null 和 undefined 值没有)
    • 返回对应的字符串,对于number,可以传参
  • String() :将任何值都能转为字符串
    • 如果值有 toString() 方法,则调用该方法(不传参数)并返回结果。
    • 如果值是 null ,返回 “null” 。
    • 如果值是 undefined ,返回 “undefined” 。
  • 用加号操作符给值加上""

模板字符串

  • 与使用单引号或双引号不同,模板字符串保留换行字符,可以跨行定义字符串

  • 插值:模板字符串可以在${}中使用表达式

    • 内部在将表达式转换为字符串时会调用 toString()
  • 标签函数:和普通的函数有一些区别

    • 参数不使用()传递,每个${}都是一个参数
    • 标签函数的第一个参数值为${}周围的其他字符,没有就是空字符
    let a=1,b=2;
    function sum(string,a,b){
    console.log(string);
    return a+b;
    }
    console.log(sum`${a}${b}`);
    //[ '', '', '' ] 两个变量,周围有三个位置
    //3
    
  • 原始字符串:使用标签函数String.raw,原样输出

    • 如果使用其他标签函数,第一个参数也可以使用raw属性原样输出
    String.raw`${a}${b}`;
    
    function fn(strings){
    console.log(strings.raw);
    }
    fn`u00A9` //[ '\u00A9' ]
    

方法

方法作用返回
concat()一次性拼接多个字符串新字符串
indexOf(target,start)从字符串开头获取下标下标|-1
lastIndexOf()从字符串结尾获取下标下标|-1
startsWith(target,start)是否以参数字符串开头布尔值
endsWith(target,end)是否以参数字符串结尾布尔值
includes(target,start)是否包含参数字符串布尔值
slice(start,end)截取字符串新字符串
substring(start,end)截取字符串新字符串
toUpperCase() |toLowerCase()改变大小写新字符串
trim()去除字符串两端的空格新字符串
trimLeft() 和 trimRight()去除前/后空格新字符串
repeat(times)重复字符串新字符串
padStart(最大长度,用于补齐的字符串)前面补齐字符串新字符串
padEnd(最大长度,用于补齐的字符串)后面不起字符串新字符串
match(正则|字符串)字符串|正则匹配匹配结果|-1
search(正则|字符串)返回首次匹配的下标下标|-1
replace(正则|字符串,替换内容|callback)替换目标字符串新字符串
split(正则|字符串,数组个数)字符串分割成数组数组

slice和substring

相同

  • 范围:[start,end)
  • 都返回新字符串(浅拷贝)
  • 只有一个参数时,范围默认到末尾处
  • 无参时,提取整个内容

不同

  • slice:允许负索引(切片)
  • substring:负数表示0

replace(正则|字符串,替换内容|callback)

  • 正则表达式如果加g修饰符,就替换所有匹配成功的值。

  • 参数二:替换字符串可以插入下面的特殊变量名:

    变量名代表的值
    $`当前匹配的字符串左侧的内容
    $&当前匹配的字符串
    $’当前匹配的字符串右侧的内容
    $n第n个分组
    $$$ 字符
    'hello world'.replace(/(w+)s(w+)/, '$2 $1')
    // "world hello"
    'abc'.replace('b', "[$`-$&-$']")
    // "a[a-b-c]c"
    
  • 参数二:如果为函数,其return后的公式作为替换字符串

    变量名代表的值
    match匹配的子串。(对应于上述的$&。)
    ...有几个分组,就有几个参数
    index匹配字串的起始下标
    string被匹配的原字符串。
    '3 and 5'.replace(/[0-9]+/g, function (match) {
    return 2 * match;
    })
    // "6 and 10"
    

编码

Base64

有时,文本里面包含一些不可打印的符号,比如 ASCII 码0到31的符号都无法打印出来,这时可以使用 Base64 编码,将它们转成可以打印的字符

所谓 Base64 就是一种编码方法,可以将任意值转成 0~9、A~Z、a-z、+/这64个字符组成的可打印字符。目的是为了不出现特殊字符,简化程序

  • btoa():任意值转为 Base64 编码,可打印
  • atob():Base64 编码转为原来的值
var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"

注意,这两个方法不适合非 ASCII 码的字符,会报错。

btoa('你好') // 报错

要将非 ASCII 码字符转为 Base64 编码,必须中间插入一个转码环节,再使用这两个方法。

function b64Encode(str) {
return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
return decodeURIComponent(atob(str));
}
b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"

encodeURI()和encodeURIComponent()

都不会对 ASCII字母 数字 ~!*()' 进行编码

  • encodeURI()更懒散一点,还不会对 @#$&=:/,;?+ 进行编码

  • encodeURIComponent()更严格,对大部分特殊符号都进行编码(推荐)

encodeURIComponent('https://wangdoc.com/javascript/bom/cookie?名字=毕东宇&name=qweq')
//"https%3A%2F%2Fwangdoc.com%2Fjavascript%2Fbom%2Fcookie%3F%E5%90%8D%E5%AD%97%3D%E6%AF%95%E4%B8%9C%E5%AE%87%26name%3Dqweq"
//全编译了
encodeURI('https://wangdoc.com/javascript/bom/cookie?名字=毕东宇&name=qweq')
//"https://wangdoc.com/javascript/bom/cookie?%E5%90%8D%E5%AD%97=%E6%AF%95%E4%B8%9C%E5%AE%87&name=qweq"
//有些符号没进行编译

eval()

  • 当解释器发现 eval() 调用时,会将参数解释为实际的 ECMAScript 语句,然后将其插入到该位置
  • 通过 eval() 定义的任何变量和函数都不会被提升
    • 这是因为在解析代码的时候,它们是被包含在一个字符串中的。它们只是在 eval() 执行的时候才会被创建。
  • 在严格模式下,在 eval() 内部创建的变量和函数无法被外部访问
  • 会存在xss隐患

最后

以上就是拼搏发带为你收集整理的【JS】String字符串转义字符转换为字符串模板字符串方法编码eval()的全部内容,希望文章能够帮你解决【JS】String字符串转义字符转换为字符串模板字符串方法编码eval()所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部