字符串

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

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

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

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

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

      '\u{1F680}' === '\uD83D\uDE80'
      // 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相关推荐

  1. javascript java 传参_[Java教程]【JS】JavaScript中的参数传递

    [Java教程][JS]JavaScript中的参数传递 0 2017-02-18 00:00:24 ECMAScript中所有函数的参数都是按值传递的,简单讲就是函数外部的值 复制给函数内部的参数, ...

  2. 【JS】WTool.js 基于JQuery的工具集 (写着玩的)

    [JS]WTool.js  基于JQuery的工具集 (写着玩的) // console.info("加载WTool中...")/*** 威工具1.基于Jquery开发2.参考VU ...

  3. 【JS】JS中数值型字符串相加变成拼接字符串的解决方法

    [JS]JS中数值型字符串相加变成拼接字符串的解决方法 参考文章: (1)[JS]JS中数值型字符串相加变成拼接字符串的解决方法 (2)https://www.cnblogs.com/xsjs/p/1 ...

  4. 【JS】教你如何在对象内任意位置插入任意属性

    [JS]教你如何在对象内任意位置插入任意属性 如果你不知道我写这篇文章的目的是什么,那不妨想想这样一个场景 var obj = {a: "A",c: "C",d ...

  5. 【JS】call,apply,bind

    [JS]call,apply,bind const steven = {name: "Steven",phoneBattery: 70,charge: function (leve ...

  6. 【js】【cornerstone】cornerstone使用url方式加载图像

    [js][cornerstone]cornerstone使用url方式加载图像 引入cornerstoneWebImageLoader loadImage 引入cornerstoneWebImageL ...

  7. 【JS】AJAX跨域-JSONP解决方案(一)

    [JS]AJAX跨域-JSONP解决方案(一) 参考文章: (1)[JS]AJAX跨域-JSONP解决方案(一) (2)https://www.cnblogs.com/h--d/p/11470534. ...

  8. 【JS】导出合并表格

    [JS]导出合并后的单元格的表格 安装依赖 npm install element-ui -S npm install xlsx npm install file-saver 代码 <templ ...

  9. 【js】复选框,复选下拉框,文本框勾连

    [js]对常见事件的一个总结 ps: 内容涉及(kendo Ui, jQuery) 如下图所示:要求实现功能点 (1)用户名(复选下拉框,可选择多个)和用户名(文本输入框)相勾连 复选下拉框改变,文本 ...

最新文章

  1. 读文献先读图——主成分分析 PCA 图
  2. poj2017——Speed Limit
  3. noj一道简单的数学题
  4. java判断字符串中是否包含字母
  5. CentOS下为Web网站性能做测试
  6. spring对事务的控制 AOP
  7. java中必检异常有哪些_Java面试题经典面试题220道(附答案)
  8. python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...
  9. 前端基础-html-路径的介绍
  10. slice python_Python slice()
  11. 《网络安全原理与实践》一1.12 复习题
  12. 付费率第一 亏损显著收窄 网易云音乐将实现盈利?
  13. Python--随机森林模型
  14. Django重写User模型修改明文密码加密方法
  15. python表格绘制斜线表头_Excel技巧—轻松搞定各种表头
  16. deb文件如何安装(安装文件管理器)
  17. 测试不同体重体型软件样子的,一种智能体型体重测量仪的设计
  18. 明白这些Python 常用包的用法,想不学会Python都难
  19. 基于Python的热门音乐特征数据分析
  20. 推荐几个高质量图片网站,再也不怕没图装X了 1

热门文章

  1. 兰菲丝lafansee帮你留住岁月的脚步,保存青春魅力的气息
  2. 大卸八块看真相 拆解5款行车记录仪
  3. ChatGPT引AI大牛新老之争?谷歌钢铁侠速归救火;Prime Air首飞业绩捉急
  4. 力扣(279完全平方数)
  5. Linux中的MySQL查询中文条件查不出来解决办法
  6. MCC、MNC、PLMN、IMSI、IMEI、ICCID、MSISDN
  7. Error: EPERM: operation not permitted,cmd中cd到指定文件夹
  8. Windows如何添加右键新建菜单
  9. 关于JediTerm
  10. 【保研加分项】本年度最全大学生竞赛汇总