ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.3 字符串型

2022-05-26 09:00:34  阅读:143  来源: 互联网

标签:console log var 3.3 字符串 hzh2 hzh1


3.3.1 字符串字面量

// 字符串值可以通过字符串字面量来表示。
// 字符串字面量需要用双引号(")或单引号(')括起来。
var hzh = "hzh";  // 将字符串"hzh"值赋给变量hzh
console.log("hzh:" + hzh); // 显示变量hzh的值

var hzh = 'hzh'; // 将字符串"hzh"值赋给变量hzh
console.log("hzh:" + hzh); // 显示变量hzh的值

image

特殊字符可以通过转义字符(串)来表示。可以通过在转义符之后使用特定字符,来表达一些特殊的含义。转义符是反斜杠(\)。例如,\n 是换行符的表达方式。

image

// 因为可以用两种引号来包围字符串字面量
// 所以只要对此加以活用,就能够少用转义字符。
// 例如,在包含大量双引号的字符串字面量外使用单引号,
// 就能够减少转义字符的出现。
// 对于双引号不需要使用转义字符(当然转义字符也没有问题)
var hzh1 = '我说"黄子涵是帅哥!"';
console.log("hzh1 = " + hzh1);

image

3.3.2 字符串型的运算

// 如果在右侧书写的是值为字符串值的变量,也一样能将其值赋值给等号左侧的变量。
var hzh1 = '黄子涵';             // 将字符串值'黄子涵'赋值给变量hzh
var hzh2 = hzh1;                // 将变量hzh1赋值给变量hzh2
console.log("hzh1:" + hzh1);   // 输出变量hzh1的值
console.log("hzh2:" + hzh2);   // 变量hzh2的值为字符串'黄子涵'
console.log("**************************************************");

console.log("**************************************************");
// 不过 JavaScript 确实和Java 一样,其字符串型是不可变类型。
var hzh3 = "黄子涵";
var hzh4 = "是帅哥!"
var hzh5 = hzh3 + hzh4;         // 连接字符串值
console.log("hzh3:" + hzh3);   // 变量hzh5的值为字符串值“黄子涵是帅哥!”
console.log("hzh4:" + hzh4);
console.log("hzh5:" + hzh5);
console.log("**************************************************");

console.log("**************************************************");
// += 运算符可以在连接字符串的同时进行赋值。
var hzh6 = "黄子涵";
hzh6 += "是靓仔!"
console.log("hzh6:" + hzh6);  // 变量hzh6的值为字符串值“黄子涵是靓仔”
console.log("**************************************************");

console.log("**************************************************");
var hzh7 = "黄子涵";
var hzh8 = hzh7;
hzh7 += "真厉害!"             // 变量hzh7的值为字符串值“黄子涵真厉害”
console.log("hzh7:" + hzh7);
console.log("hzh8:" + hzh8); // 变量hzh8的值仍保持为字符串值“黄子涵”
console.log("**************************************************");

console.log("**************************************************");
// 可以通过typeof运算符来获知值的数据类型
console.log(typeof "黄子涵");            // 对字符串字面量进行typeof运算

var hzh9 = "黄子涵";
console.log(typeof hzh9);               // 对变量hzh9进行typeof运算
console.log(typeof (hzh9));             // 也可以添加括号
console.log(typeof (typeof (hzh9)));    // typeof运算的结果也是字符串值

image

3.3.3 字符串型的比较

JavaScript 有两种等值运算符,即 =====。与之对应,也有两种不等运算符 !==!=

=== 和 == 的区别在于,在比较的时候是否会进行数据类型的转换。=== 在比较的时候不会对数据类型进行转换。在ECMAScript 标准中,将其称为严格相等(strict equal)。

// 如果只考虑字符串之间的比较,=== 和 == 的结果是没有区别的。
// 两种方式都会判断字符串的内容是否一致。
var hzh1 = "黄子涵";
var hzh2 = "是帅哥!";
var hzh3 = hzh1 + "是帅哥!";
console.log("hzh1 == hzh2?" + (hzh1 == hzh2));
console.log("hzh1 == hzh3?" + (hzh1 == hzh3));
console.log("hzh2 == hzh3?" + (hzh2 == hzh3));
console.log("hzh1 != hzh2?" + (hzh1 != hzh2));
console.log("hzh1 != hzh3?" + (hzh1 != hzh3));
console.log("hzh2 != hzh3?" + (hzh2 != hzh3));
console.log("**************************************************");
//对字符串值的比较基于 Unicode 字符的编码值(编码位置)。
var hzh4 = "hzh";
var hzh5 = "HZH";
console.log("hzh4 < hzh5?" + (hzh4 < hzh5));
console.log("hzh4 <= hzh5?" + (hzh4 <= hzh5));
console.log("hzh4 > hzh5?" + (hzh4 > hzh5));
console.log("hzh4 >= hzh5?" + (hzh4 >= hzh5));

image

下面是比较大小时 Unicode 的编码位置的一些典型情况。要深入理解这部分的内容,需要有 Unicode 的相关知识,不过只要能记住以下的情况,就多少能进行运用了。

  • 英文字母是字典顺序(ABC 顺序)
  • 英文的大写字母在小写字母之前
  • 数字和符号在英文字母之前(不过有些符号是在英文字母之后的)
  • 日文的平假名在片假名之前
  • 日文的平假名和片假名都是字典顺序(あいうえお顺序)
  • 日文浊音和半浊音的顺序则是按以下的规律排列:へ、ほ、ぼ、ぽ、ま
  • 日文汉字在平假名和片假名之后
  • 日文汉字的排列顺序视计算机的具体情况而定(有些是按照音读的字典顺序)
    在实际中,只有英语单词

3.3.4 字符串类(String 类)

之前提到,在 JavaScript 中字符串型是一种内建类型。不过 JavaScript 的字符串也有容易使人混淆的地方,即除了内建类型的字符串之外还存在一个字符串类。

字符串类的名称为 String。JavaScript 中字符串型和 String 类的关系,大致相当于 Java 中数值型和包装类型(Number 类和 Integer 类)的关系。字符串型和 String 类之间也同样支持隐式类型转换。在 Java 中存在装箱和拆箱转换,在 JavaScript 的字符串型和 String 类之间也有着类似的转换。这一转换通常是隐式进行的。

var hzh1 = '黄子涵是帅哥!'
// 在形式上类似于读取字符串值的属性
console.log("数组hzh1的长度:" + hzh1.length);
// 在形式上类似于读取字符串字面量的属性
console.log("'黄子涵是帅哥!'的长度:" + '黄子涵是帅哥!'.length);
// 上述代码,其内部发生了字符串值到String对象的隐式数据类型转换

image

3.3.5 字符串对象

// 可以使用new运算符,来显示地生成一个字符串对象
var hzh1 = new String('黄子涵');  // 生成字符串对象
console.log("输出hzh1:" + hzh1);
console.log("hzh1的类型:" + (typeof hzh1));
console.log("*****************************************");
// 隐式类型转换也能反向进行
// 将字符串对象隐式转换为了字符串值
var hzh2 = hzh1 + '是帅哥!';
console.log("输出hzh2:" + hzh2);
console.log("hzh2的类型:" + (typeof hzh2));
console.log("*****************************************");
// 对象的相等运算,判断的是两者是否引用了同一对象
// 而并非两者的内容相同
var hzh3 = new String('黄子涵');
var hzh4 = new String('黄子涵');
// 虽然字符串的内容相同,但是并非引用了同一个对象,所以结果是false
console.log("判断hzh3和hzh4是否相等:");
console.log(hzh3 == hzh4);
// 虽然字符串的内容相同,但是并非引用了同一个对象,所以结果是false
console.log("判断hzh3和hzh4是否严格相等:");
console.log(hzh3 === hzh4);
console.log("*****************************************");
// 对于字符串值和字符串对象的等值判断,
// 如果使用的是会进行隐式数据类型转换的 == 运算,
// 则只会判定其内容是否相同,如果内容相同则结果为真。
var hzh5 = new String('黄子涵是帅哥!');
var hzh6 = '黄子涵是帅哥!';
// 进行数据类型转换的等值运算的结果为true
console.log("判断hzh5和hzh6是否相等:");
console.log(hzh5 == hzh6);
// 不进行数据类型转换的等值运算的结果为false
console.log("判断hzh5和hzh6是否严格相等:");
console.log(hzh5 === hzh6);
// 对于比较大小运算,字符串对象和字符串值一样,都是比较其字符串内容。
// 因此可以认为,这时字符串值和字符串对象之间没有区别。

image

3.3.6 避免混用字符串值和字符串对象

// 可以使用 typeof 运算来判别一个字符串是字符串值还是字符串对象。
// 字符串对象的 typeof 运算结果为"object"。
var hzh1 = new String('黄子涵是帅哥!');
console.log("判断hzh1的数据类型:");
console.log(typeof hzh1);
console.log("*********************************************");
// 应该避免显式地生成字符串对象。
// 需要使用字符串值的时候,一般都使用字符串字面量。
// 对于其余的情况,通过 String 函数进行显式的数据类型转换就足够了。
// 应该是积极地使用隐式数据类型变换,将字符串值转换为字符串对象。
// 转换为字符串对象后,只要在字符串值之后写上点运算符和属性名,
// 就能对字符串进行各种各样的操作了。
var hzh2 = '黄子涵是帅哥!'
console.log("返回字符串值下标为1的字符:");
console.log(hzh2.charAt(1));
console.log("对于字符串字面量也能像这样进行方法调用:");
console.log('黄子涵是帅哥!'.charAt(1));

image

3.3.7 调用 String 函数

// 通过调用 String 函数就可以生成字符串值。
// 一般来说,使用 String 函数是为了进行显式的数据类型转换。
var hzh1 = String('黄子涵是帅哥!');
// 变量hzh1的值是字符串型
console.log("判断hzh1的数据类型:");
console.log(typeof hzh1);
// 由数值类型向字符串值类型的显式数据类型变换
var hzh2 = String(47);
console.log("输出hzh2的值:");
console.log(hzh2);
// 变量hzh2的值是字符串型
console.log("判断变量hzh2的数据类型:");
console.log(typeof hzh2);

image

3.3.8 String 类的功能

String 类的函数以及构造函数调用

image

String 类的属性

image

String.prototype 对象所具有的属性

image

String 类的实例属性

image

// 通过数值属性获取指定下标的字符
// 其返回值是一个 String对象
var hzh1 = new String('黄子涵');
console.log("输出下标1的字符:");
console.log(hzh1[1]);
// 由于有隐式数据类型转换,
// 所以对字符串值也能进行这样的操作
console.log("字符串值'黄子涵'下标为2的字符:");
console.log('黄子涵'[2]);

image

3.3.9 非破坏性的方法

// 字符串对象和字符串值一样,是不可变的。
// 也就是说,不能改写字符串的内容。
// 所有要改变字符串内容的方法,都会生成一个新的字符串对象然后将其返回。
var hzh1 = new String('hzh');
// 调用对象hzh1的toUpperCase方法
var hzh2 = hzh1.toUpperCase();  
// 对象hzh1的内容不会发生变化
console.log("输出hzh1的值:");
console.log(hzh1);
console.log("输出hzh2的值:");
console.log(hzh2);
// 即使是 JavaScript 独有的 [] 运算也不会改写字符串的内容
hzh1[0] = 'HZH';
console.log("输出hzh1的值:");
console.log(hzh1);
// 改变内部状态的方法被称为破坏性的方法。
// 一般来说,非破坏性的方法更好一些。
// 不过在有些时候,非破坏性方法的效率会相对较低。

image

标签:console,log,var,3.3,字符串,hzh2,hzh1
来源: https://www.cnblogs.com/Huang-zihan/p/16312133.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有