字符串 string

数据类型

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

引用数据类型:对象(Object)、数组(Array)、函数(Function)。

注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。


 

<script>
//字符串特性   由0个或多个16位unicode字符组成;
//引号包裹,单引号和双引号都可以;但是单引号和双引号不能交叉使用;
//(放在引号内的任何东西都是属于字符串,即使里面没有东西或者是空格,都属于合法的字符串 )
    let str1="1";
    let str5='';
    let str2="";
    let str3=" ";
    let str4="function(){}";
    console.log(typeof str1);
    console.log(typeof str2);
    console.log(typeof str3);
    console.log(typeof str4);
    console.log(typeof str5);
    console.log(".............");

    //JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型
   /*  var a;//undefined
   var x=5;//number
   var x="John";//string */


    //typeof 判断数据类型  
    let a=1;
    let b;
    let c="daiqi";
    function run(){};
    let d=[1,2,3,4,5];
    let e={name:"daiqi"};
    console.log(typeof a);//number
    console.log(typeof b);//undefined
    console.log(typeof c);//string
    console.log(typeof run);//function
    console.log(typeof d);//object
    console.log(typeof e);//object
    console.log(".............");

 

//instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
//也可以理解为是否为某个对象的实例,typeof不能区分数组,但instanceof则可以。
    let f=[];
    let g={};
    console.log(f instanceof Array);//true
    console.log(g instanceof Array);//false

    let h=[1,2,3];
    let j={name:"daiqi"};
    console.log(h instanceof Array);//true
    console.log(j instanceof Object);//true

   function User(){};
   let k=new User();
   console.log(k instanceof User);//true

</script>

 
 强制类型转换   就是一种数据类型转换成另外一种数据类型
  字符串转成数值型,将数值型转换成布尔值
    
 例如:js写一个加法计算器 ,输入语句prompt( ) 所获得的数据默认为字符串
      而字符串的数据 无法直接用加法   即使写上加法命令 ,结果也是字符串与字符串的拼接
      所获得的数据 必须进行强制转换为数值型 才能进行运算


    //转换成 "字符串" 共有3 种方法

    //方法一:利用toString()方法转换成字符串类型
    //适用类型 Number/Boolean/String/Object 参数:number类型的数值基数;一般不需要写
    //在null空值 和 undefined未定义型是不能用的
    let a=123;
    a=a.toString(); //写个a 后面跟着点 意思是把变量a的值进行某种操作
                     //点的后面是要写执行操作的内容 ,因为后面要把a强制转换为字符串              
    console.log(typeof a,a);//string 123
    console.log('....................');

    //方式二: String()函数进行强制转换  (可将空值和未定义型进行强制转换)
    //先写String() ,然后在括号中写上需要转换的变量,最后给变量赋值
   let b=567;
    b=String(b);
   console.log(typeof b,b);

   //方法三: 隐式转换  用"加号+" ,只要有字符串参与的就表示字符串拼接
   var e=99+"";
   console.log(typeof e,e);//string 123
   var c=null+"";
   var d=undefined+"";
   console.log(typeof c,c);//string null
   console.log(typeof d,d);//string undefined

 //某个数据并不仅限于Number类型;数组也可以的;
 console.log(typeof ([1,2,3,4]+""));//string 

 

js普通字符串和new String有什么区别
字符串就是对象,只不过存储的内存不一样
基本数据类型是存储在栈 (stack)内存中的,而引用类型 对象(object) 是存储在堆中的,但为什么栈内存也可以有方法和属性
str1 又不属于String 却拥有String的方法
因为这是Js中设计的
原始资料类型的方法与属性是"借" 来的,所有原始资料类型可以向new String() 或new Number()借来所有的方法,但是自己本身却没有属性和方法
系统内部,字面量字符串 [借用] new String()属性 
 //字符串为什么可以用下标访问   结论:字符串就是对象
   var str1="123";//string  不是对象===>栈
    var str2=new String("123");//object  对象===>堆内存
    str1.charAt();
    str2.charAt();
 //值类型 与 对象
   //用字面量 与 对象方法创建字符串 返回不同的类型
//只有对象才能使用的方法,值类型也可使用方法, 因为执行时会将值类型转为对象
   let name="Matt";
   let age=new String("4");
   console.log(typeof name,typeof age);//string , object
   console.log(name.length);//4
   console.log(age.length);//1

字符串一旦被创建,其值是不能改变的,若要改变必须销毁原有字符串,然后用另一个包含新值的字符串填充改变量

//字符串创建的原理;
var str1="12345";//把"12345"这个字符串赋值给str1这个变量;
str1="1234";//把"1234"这个字符串赋值给str1这个变量;
//并不是把"12345"修改为"1234"然后赋值给str1
console.log(str1);//1234
console.log('123\'456\'78');//123'456'78
转义序列
  \n 换行,常用alert
    转义符  \" 双引号    \' 单引号

//document.write('这是\"送给您\" 的一朵花');
//document.write("这是\'送给您\'的一朵花"); 
//document.write("这是送给您的<br/>一朵花"); //document.write()中换行 用<br/>
alert("这是送给您的\n一朵花");//在alert()中换行,用\n

 

JavaScript多行字符串
//ES2015之前 
//强行将一个字符串分为两行,然而事实是代码会报错。
/*  var str="我叫苗苗,我的生日是
  2016.06.20";//报错 */
//在行尾添加反斜杠,可实现代码上的换行操作,不会报错,
//但这种换行方式并非标准规定,所以不推荐使用
//虽然在代码上确实实现了换行,但是实际运行打印结果确实字符串依然在一行显示。
var str="我叫苗苗,我的生日是\
 2016.06.20";
console.log(str);//我叫苗苗,我的生日是2016.06.20

//在字符串需要换行的地方添加换行符 
var str="我叫苗苗,我的生日是\n2016.06.20";
console.log(str);
 
//ES2015之前后
//模板字面量 使用反引号创建 ,可轻松实现换行 直接在代码中进行换行即可,表现与普通字符串一样,当然它的功能不止于此
//注:在模板字符串中,空格总是会计算在内的,所以要注意换行的缩进。
var str=`我叫苗苗,我的生日是
2016.06.20`;
console.log(str);
console.log(str.length);//21                    

模板字符串

//${表达式}占位符需要和模板字符串配合使用。也就是为某一个数据结构占据位置,
    //${}占位符:
    //可以直接在模板字面量中插入占位符${}。
    //占位符就如同一个普通字符串一样,可以插入到字符串中的任意位置。 
    //大括号中可以是任何合法的表达式,并返回此表达式的值,通过占位符可以实现灵活的拼接操作 
    
    //占位符中的表达式是对函数的调用,函数返回一个字符串。
    let func=(url)=>{
      return url;
    }
    let str=`本站的url地址是${func("baidu.com")}`;
    console.log(str);//本站的url地址是baidu.com
    
    //占位符中是数组,但是这个数组所处的上下文环境是字符串。那么就隐身调用toString方法将其转换为字符串。
    let arr=["这","是","我","的"];
    let str=`${arr}`;
    console.log(str);

//ES5字符串:可以通过双引号或者单引号创建字符串,不能实现字符串换行或者格式化等操作
 //如果在字符串中插入一个JavaScript表达式 需要使用+进行字符串连接。
const person={name:"琪琪",age:24,hobby:"游泳",hometown:"河北"};
const intro="大家好,我是"+person.name+",今年"+person.age+",我的爱好是"+person.hobby+",我的家乡在"+person.hometown;
console.log(intro);//大家好,我是琪琪,今年24,我的爱好是游泳,我的家乡在河北

//如果用模板字面量,通过反引号定义,代码很自然的利用占位符将变量插入到字符串中
//这里的字符串不是普通字符串,而是模板字符串(他是原有普通字符串的加强)
const intro2=`大家好,我是${person.name},
今年${person.age},
我的爱好是${person.hobby},
我的家乡在${person.hometown}我是${person.age>18?"成年":"未成年"}`; 
console.log(intro2);//大家好,我是琪琪,今年24,我的爱好是游泳,我的家乡在河北
                    //模板字符串不光可插入变量 也可插入表达式
                    
//1.把下面的代码改为模板字符串
   const weather={
     city:"广州",
     temperature:27,
     humidity:"94%"
   }
   const weatherForecast=`下面播报一则天气预报:${weather.city}气温${weather.temperature}, 湿度${weather.humidity}`;
   console.log(weatherForecast);

 

  //2.使用模板字符串输出以下语句:你输入的参数{x}  他的2倍{2x} 他的平方{x^2}
  function calc(x){
    return`你输入的参数是${x},他的2倍是${2*x},他的平方是${x*x}`;
  }
  console.log(`${calc(3)}`);

 

   //占位符是JS表达式,那么可替换的就不仅仅是简单的变量名
  let name="LiLi";
    let message  =`hello,${name}`;
    console.log(message);

 //占位符是JS表达式,可以轻易嵌入运算符
     let count =10;
    price=0.25;
    message=`${count} is cost$${(count*price).toFixed(2)}`;
    console.log(message);
 
 //占位符是JS表达式,函数调用
   function fn(){
       return "hello world";
   }
   console.log(`${fn()}`);


//模板字面量本身也是 JS 表达式,因此可以将模板字面量嵌入到另一个模板字面量内部
   let name="LiLi";
   message=`Hello,${`my name is ${name}`}`;
   console.log(message);

 

/* //分割字母
let name ="daiqi";
console.log(name.split(""));//["d", "a", "i", "q", "i"]

//字符串转为数组
console.log("1,2,3".split(","));//["1", "2", "3"] */

 

<script>
    //占位符是JS表达式,那么可替换的就不仅仅是简单的变量名
  let name="LiLi";
    let message  =`hello,${name}`;
    console.log(message);

 //占位符是JS表达式,可以轻易嵌入运算符
     let count =10;
    price=0.25;
    message=`${count} is cost$${(count*price).toFixed(2)}`;
    console.log(message);
 
 //占位符是JS表达式,函数调用
   function fn(){
       return "hello world";
   }
   console.log(`${fn()}`);
//模板字面量本身也是 JS 表达式,因此可以将模板字面量嵌入到另一个模板字面量内部
   let name="LiLi";
   message=`Hello,${`my name is ${name}`}`;
   console.log(message);

</script>

 



 

使用 slice、substr、substring 函数都可以截取字符串。
<script>
    //length属性 获取字符串长度
    //字符串大小下转换 toUpperCase();转字符串大写     toLowerCase();转字符串小写  
    console.log('daiqi'.length);//5
    console.log("daiqi".toUpperCase());//DAIQI
    console.log("DDDD".toLowerCase());//dddd
 
 //使用trim删除字符串左右的空白字符
 let str = 'houdunren.com     ';
console.log(str.length);
console.log(str.trim().length);

//使用trimLeft删除左边空白,使用trimRight删除右边空白
 let name='  daiqi    ';
console.log(name);
console.log(name.trimLeft());
console.log(name.trimRight()); 

//获取单字符
//根据从0开始的位置获取字符
console.log('daiqi'.charAt(3));//q
//使用数字索引获取字符串
console.log('daiqi'[2]);//i
    </script>

 

 //使用 slice、substr、substring 函数都可以截取字符串。
<script>
    let name='daiqisqy.com';
    console.log(name.slice(3));//qisqy.com

    //substr和substring有什么区别
    //substr 着重在于截取多长的字符串
    //他们传入的第一个参数都是起始位置
    let str="I am a front-end developer";
    console.log(str.substr(7,9));//从7开始,9代表多长 就把front-end截取出来
    //如果第一个参数传入的参数是一个负值,可从字符串的结尾往前寻找的,第2个参数还是写长度
    //如果后面的长度不写 或 写的是超过实际字符串的数字(如字符串总长是9,却写了个18)实际只会截取到字符串的结尾
    console.log(str.substr(-9,9));//developer
    console.log(str.substr(-9,19));//developer
    console.log(str.substr(-9));//developer
        
    //substring着重在于截取字符串那个位置 到 那个位置  (第1个参数不能使用负值)
    //第二个参数一定要比你要截取到的下标 多一个,  与slice相似
    console.log(str.substring(7,16));
    console.log(str.substring(7,0));//I am a
    console.log(str.substring(3, -9)); //I a  负数转为0

    console.log(str.slice(7,16));
    </script>

 








posted @ 2021-02-03 10:31  沁莹  阅读(109)  评论(0)    收藏  举报