【JS】String
字符串
字符串的内部格式始终是 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相关推荐
- javascript java 传参_[Java教程]【JS】JavaScript中的参数传递
[Java教程][JS]JavaScript中的参数传递 0 2017-02-18 00:00:24 ECMAScript中所有函数的参数都是按值传递的,简单讲就是函数外部的值 复制给函数内部的参数, ...
- 【JS】WTool.js 基于JQuery的工具集 (写着玩的)
[JS]WTool.js 基于JQuery的工具集 (写着玩的) // console.info("加载WTool中...")/*** 威工具1.基于Jquery开发2.参考VU ...
- 【JS】JS中数值型字符串相加变成拼接字符串的解决方法
[JS]JS中数值型字符串相加变成拼接字符串的解决方法 参考文章: (1)[JS]JS中数值型字符串相加变成拼接字符串的解决方法 (2)https://www.cnblogs.com/xsjs/p/1 ...
- 【JS】教你如何在对象内任意位置插入任意属性
[JS]教你如何在对象内任意位置插入任意属性 如果你不知道我写这篇文章的目的是什么,那不妨想想这样一个场景 var obj = {a: "A",c: "C",d ...
- 【JS】call,apply,bind
[JS]call,apply,bind const steven = {name: "Steven",phoneBattery: 70,charge: function (leve ...
- 【js】【cornerstone】cornerstone使用url方式加载图像
[js][cornerstone]cornerstone使用url方式加载图像 引入cornerstoneWebImageLoader loadImage 引入cornerstoneWebImageL ...
- 【JS】AJAX跨域-JSONP解决方案(一)
[JS]AJAX跨域-JSONP解决方案(一) 参考文章: (1)[JS]AJAX跨域-JSONP解决方案(一) (2)https://www.cnblogs.com/h--d/p/11470534. ...
- 【JS】导出合并表格
[JS]导出合并后的单元格的表格 安装依赖 npm install element-ui -S npm install xlsx npm install file-saver 代码 <templ ...
- 【js】复选框,复选下拉框,文本框勾连
[js]对常见事件的一个总结 ps: 内容涉及(kendo Ui, jQuery) 如下图所示:要求实现功能点 (1)用户名(复选下拉框,可选择多个)和用户名(文本输入框)相勾连 复选下拉框改变,文本 ...
最新文章
- 读文献先读图——主成分分析 PCA 图
- poj2017——Speed Limit
- noj一道简单的数学题
- java判断字符串中是否包含字母
- CentOS下为Web网站性能做测试
- spring对事务的控制 AOP
- java中必检异常有哪些_Java面试题经典面试题220道(附答案)
- python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...
- 前端基础-html-路径的介绍
- slice python_Python slice()
- 《网络安全原理与实践》一1.12 复习题
- 付费率第一 亏损显著收窄 网易云音乐将实现盈利?
- Python--随机森林模型
- Django重写User模型修改明文密码加密方法
- python表格绘制斜线表头_Excel技巧—轻松搞定各种表头
- deb文件如何安装(安装文件管理器)
- 测试不同体重体型软件样子的,一种智能体型体重测量仪的设计
- 明白这些Python 常用包的用法,想不学会Python都难
- 基于Python的热门音乐特征数据分析
- 推荐几个高质量图片网站,再也不怕没图装X了 1