javascript 字符串操作

一、typeof类型

1. 基本数据类型: number,string,undefined,boolean,null
     // typeof 121       //number
     // typeof '1212'    //string
     // typeof undefined //undefined
     // typeof true      //boolean
     // typeof null      //object
     // typeof console.log  //function
2. 引用数据类型: Object(Array/Date/RegExp/Function)

2.值类型和引用类型的区别
(1)值类型:
    1、占用空间固定,保存在栈中(当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;栈中存储的是基础变量以及一些对象的引用变量,基础变量的值是存储在栈中,而引用变量存储在栈中的是指向堆中的数组或者对象的地址,这就是为何修改引用类型总会影响到其他指向这个地址的引用变量。)
    2、保存与复制的是值本身
    3、使用typeof检测数据的类型
    4、基本类型数据是值类型
(2)引用类型:
    1、占用空间不固定,保存在堆中(当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),则这个对象依然不会被销毁,只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在核实的时候回收它。)
    2、保存与复制的是指向对象的一个指针
    3、使用instanceof检测数据类型
    4、使用new()方法构造出的对象是引用型

二、变量计算-强制类型转换

1. 字符串拼接
var a = 100 + 10     //110
var a = 100 + '10'   //10010

2. ==运算符
100 == '100'          //true
0 == ' '                   //true
null == undefined  //true

3. if语句
var a = true
if(a){
//……
};
var b = 100
if(b){
//……
};
var c = ''
if(c){
//……
};

4. 逻辑运算
console(10 && 0)    //0
console( '' || 10) //10
console( )

内置函数

一,常规函数
alert函数:显示一个警告对话框,包括一个OK按钮。
语法:alert("hello world");

confirm函数:显示一个确认对话框,包括OK、Cancel按钮。
语法:confirm("确定要删除XXX吗?"); 

prompt函数:显示一个带有文本框的对话框,提示等待用户输入。
语法:prompt("请输入您的用户名","此处显示文本框的默认值");
 

二,字符串函数
连接符'+':将两个字符串连接起来
语法:var str='a'+'b';//结果:str的值为 ab

substring函数:
语法1:从第 x 位字符开始截取
var str="Hello world!";
console.log(str.substring(7)); //从第 7 位以后开始截取到结尾  结果:orld!

语法2:截取从第 x 位到第 y 位的字符(从字符串中提取一些字符)
var str = "Hello world!";
console.log(str.substring(3,7)) //从第 3 位以后开始截取到第 7 位之间 结果:lo w

slice函数:
1.语法:若只有一个参数,截取 x 开始到结尾的所有字符
var str='Hello world!';
console.log(str.slice(-2)) //倒数第 2 位开始到结尾截取的所有的  结果:d!
2.语法:若两个参数,截取从 x 到 y 之间的字符
var str='Hello world!';
console.log(str.slice(3,7))  //从第 3 位以后开始截取到第 7 位之间 结果:lo w
console.log(str.slice(2,-3)) //从第 2 位 到倒数第 3 位之间的距离  结果:llo wor

substr函数:
1.语法: str.substr(x,y) 从第 x 位开始截取长度为 y 的字符
var str='Hello world!';
console.log(str.substr(3,7))//从第 3 位以后开始截取长度为 7 位数的值  结果:lo worl 
2.语法:如果不传y 默认从 x 位开始到结尾的字符串。
var str = 'Hello world!';
console.log(str.substr(7)) //从第 7 位以后开始截取到结尾  结果:orld!
3.语法:传负数,是从字符串后面向前几位数开始截取,只传一个负数默认是从倒数的位置截取到结尾。
var str = 'Hello world!';
console.log(str.substr(-2)) //倒数第 2 位开始截取到结尾  结果:d!
4.语法:如果传的是两位数,第一位是倒数开始,第二位是倒数的位置向后截取几位。
var str = 'Hello world!';
console.log(str.substr(-5,2)) //倒数第 5 位以后开始截取向后截取 2 位 结果:or

match函数
语法:match(Regexp)
// Regexp 是匹配规则,全局匹配;
//返回结果是存放在数组中的匹配到的结果;
//如果没有找到匹配结果,返回null;
var str="The rain in SPAIN stays mainly in the plain"; 
 console.log(str.match(/ain/g)) //["ain", "ain", "ain"]
console.log(str.match('1'))    //null

search函数
语法:search(Regexp)
//Regexp 该参数可以是需要在 stringObject 中检索的子串,也可以是需要检索的 RegExp对象,返回值是下标,下标从0开始,没有找到则返回-1,查找跟indexOf一样,找到返回下标,没有找到返回-1,但是indexOf不支持RegExp对象查找。
var str = 'hello world'
console.log(str.search('1'))  //返回 -1
console.log(str.search('llo')) //返回 2  返回找到的下标
console.log(str.search(/world/i)) //返回6 


toLowerCase函数:
语法: 将大写英文转换为小写
var str = "Hello world!";
console.log(str.toLowerCase())  //转化成全部小写 结果:hello world!

toUpperCase函数:
语法:将小写英文转换为大写
vvar str = "Hello world!";
console.log(str.toUpperCase())  //转化成全部大写 结果:HELLO WORLD!
 
检索字符串: 
 var str = 'Hello world'
1.语法: 如果传一个参数,是要检索的字符,若检索不到会返回-1,检索到的话返回在该串中的起始位置 
console.log(str.indexOf('ddd')) // -1
console.log(str.indexOf('llo')) // 2
2.语法:如果传两个参数,第一个参数是要检索的字符,第二个参数是从哪个下标开始检索,检索到的话返回在该串中的起始位置 
var str = 'Hello world Hellow world'
console.log(str.indexOf('Hellow', 1)) // 12


查找替换字符串: 
语法:两个参数,第一个参数是匹配的规则,或者说是要匹配的字符,第二个参数是要用来替换的的字符
var str = "Hello world!"; 
console.log(str.replace("world","china")); //结果: "Hello china!"

特殊字符:
\b : 后退符 \t : 水平制表符 
\n : 换行符 \v : 垂直制表符 
\f : 分页符 \r : 回车符 

三,字符串转码
将字符转换成Unicode编码 
var str = "hello"; 
语法:字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回 NaN。
console.log(str.charCodeAt(0))   // 72
console.log(str.charCodeAt(-1))  // NaN
console.log(str.charCodeAt(5))  // NaN

语法:fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
console.log(String.fromCharCode(72,69,76,76,79))  // HELLO

将字符串转换成URL编码 
var str = "hello all"; 
var code = encodeURI(str); //结果: "hello%20all" 
var str = decodeURI(code); //结果: "hello all" 

相应的还有: 
encodeURIComponent() decodeURIComponent()

将字符串转换成base64编码 
base64Encode() base64Decode() 用法同上

语法:charAt()
var str = 'hello world'
//参数传入下标,返回对应的在该下标的值
console.log(str.charAt('1'))  //返回 e

四、数组对象和方法
1.concat(arr,arr2,arr3….)
concat()  //连接多个数组
实例:
var arr = [1,2];
var arr1 = [3,4];
var arr2 = [5,6];
console.log(arr.concat(arr1))       // [1, 2, 3, 4]
console.log(arr1.concat('a','b'))   // [3, 4, "a", "b"]

2.join(‘,’)或者join('')
join() //将数组中所有的元素按照某种形式分割,然后把所有元素放入一个字符串中
实例:
    var arr = ['a','b','c']
    arr.join('|') // 'a|b|c'
    arr.join('') // 'abc'

3.pop() 会改变原数组
pop() //删除数组最后一个元素并返回最后一个元素
实例:
    var arr = ['toUpperCase','concat','join']
    arr.pop() // 'join'
    arr //['toUpperCase','concat]

4.push(‘newEle1’,’newEle2’,…) 会改变原数组
push() //给数组最后添加元素,并返回数组添加元素后的长度
实例:
    var arr = ['toUpperCase','concat','join']
    arr.push('pop','push') //5
    arr //['toUpperCase','concat','join','pop','push']

5.reverse() 会改变原数组
reverse() //颠倒数组
实例:
    var arr = ['toUpperCase','concat','join']
    arr.reverse() // ['join','concat','toUpperCase']
    arr // ['join','concat','toUpperCase']

6.shift() 会改变原数组
shift() //删除数组的第一个元素,并返回数组被删除的元素
实例:
    var arr = ['toUpperCase','concat','join']
    arr.shift() // 'toUpperCase'
    arr //['concat','join']

7.unshift(‘newEle1’,’newEle2’…) 会改变原数组
unShift() //像数组最前面添加元素,并返回新的数组长度
实例:
    var arr = ['toUpperCase','concat','shift','push']
    arr.unshift('pop','unshift') //6
    arr //['pop','unshift','toUpperCase','concat','shift','push']

8.slice(‘start’,’end’)
注释:slice和splice是不同的,slice不会修改原数组,splice是在原数组上进行修改
slice('start','end') //start从何处开始截取,end到何处结束。start为-1时从最后一个开始截取。截取范围不包含start,包含end。根据长度算
实例:
    var arr = ['toUpperCase','concat','join','pop','push','shift','unshift']
    arr.slice(1) //['concat','join','pop','push','shift','unshift']
    arr.slice(1,3) //['concat','join']
    arr.slice(-1) //['unshift']
    arr.slice(-5,-1) //['join','pop','push','shift']
    arr //原数组

9.splice(index,howmany,’item1’,’item2’…) 会改变原数组
语法:splice(index,howmany,'item1','item2'...) //index,howmany必填
注释:
//index:  索引,从第几个下标开始
//howmany:  删除多少个
//item: 如果传值,那么就是在添加 item item2 item3
实例:
    var arr = ['toUpperCase','pop','push','shift','unshift']
    arr.splice(1,0,'concat','join')
    arr //['toUpperCase','concat','join','pop','push','shift','unshift']

    arr.splice(1,1)
    arr //['toUpperCase','push','shift','unshift']

    arr.splice(1,2,'concat','join')
    arr //['toUpperCase','concat','join','shift','unshift']

10.toString() 和toLocaleString()
toString() //将数组转换成字符串
toLocaleString() //将数组转换成本地字符串
注释:该方法在转换数组没什么区别,但是在转换new Date()的时候就有区别
实例:
    var arr = ['splice','slice']
    var number = 123

    arr.toString() //splice,slice
    arr.toString() //'123'

var str = new Date()
console.log(str)  // Thu Mar 14 2019 23:54:41 GMT+0800 (中国标准时间)
console.log(str.toLocaleString()) // 2019/3/14 下午11:55:13
console.log(str.toString()) // Thu Mar 14 2019 23:55:13 GMT+0800 (中国标准时间)

--------------------- 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容