一、概述
JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。 虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的。如果运算符发现,运算子的类型与预期不符,就会自动转换类型。什么是字符串?如何手动强制转换数据类型?
二、字符串
?????????一、定义 ? ? ? ? ? ? ? ? - 字符串就是零个或多个排在一起的字符,放在单引号或者双引号之中。 ? ? ? ? ? ? ? ? - 单引号字符串内部可以使用双引号,双引号字符串内部可以使用单引号。 ? ? ? ? ? ? ? ? - 如果要在单引号字符串内部使用单引号,就必须在内部的单引号前面加上转义符(反斜杠\),一个符号一个反斜杠。 ? ? ? ? ? ? ? ? - 字符串默认写在一行,分成多行就会报错。 ? ? ? ? ? ? ? ? - 连接运算符(+)可以连接多个单行字符串,可以多行书写,但输出的时候是单行(或长字符串必须分成多行,可以在每一行的尾部使用反斜杠。 )
????????二、字符串和数组 ? ? ? ? ? ? ? ? - 字符串可以被视为字符数组,可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始) ? ? ? ? ? ? ? ? - 如果方括号中的数字超过字符串的长度,或者方括号中根本不是数字,则返回undefined ? ? ? ? ? ? ? ? - 字符串与数组只能实现查看,无法改变字符串之中的单个字符,即增删改不行
????????三、length属性 ? ? ? ? ? ? ? ? - length属性返回字符串的长度,该属性无法修改(用于查看字符串的长度) ? ? ? ? ? ? ? ? - 变量名.length
补充:如何区分方法和属性(带有小括号的是方法,没有括号的是属性)
var str1 = "a'b'c";
console.log(str1);
var str2 = 'a"b"c';
console.log(str2);
//想在单引号里加单引号或者其他符号,就在该符号前加\
var str3 = 'I\'m from \'China\'';
console.log(str3);
//想多行写用加法运算符连接
var longString = 'I'
+ 'am'
+ 'from'
+ 'China';
console.log(longString);//IamfromChina
//或用反斜杠连接
var longString = 'Long \
long \
long \
string';
console.log(longString);// "Long long long string"
//字符串应用数组的性质
var c = 'very good!';
console.log(c[0]);// v
console.log(c[2]);// r
console.log(c[4]);// 空格
console.log(c.length);//10
//尝试用数组的修改,发现不能实现,所以字符串不能实现数组的增删改
delete c[2];
console.log(c);
c[0] = 'B';
console.log(c);
//如果方括号中的数字超过字符串的长度,则返回undefined
console.log('abc'[7]);// undefined
//或者方括号中根本不是数字,则返回undefined
console.log('abc'['x']);// undefined
console.log('hello'[1]);
三、强制转换
? ? ? ? 1、Number():使用Number函数或者方法,可以将任意类型的值转化为数值
? ? ? ? ? ? ? ? -字符串如果可以被解析为数值,则转换为相应数值,不能被解析则返回NaN,只要有字母等乱码哪怕有数字也不会被解析。
? ? ? ? ?2、String():使用String函数,可以将任意类型的值转化成字符串【或者变量名.toString()】
????????3、Boolean():Boolean函数,以将任意类型的值转化成布尔值,除了以下五个值的转换结果为false,其它的值全部为true ? ? ? ? ? ? ? ? ? ? - undefined ? ? ? ? ? ? ? ? ? ? - null ? ? ? ? ? ? ? ? ? ? - 0(包含-0和+0) ? ? ? ? ? ? ? ? ? ? - NaN ? ? ? ? ? ? ? ? ? ? - ''(空字符串)
四、自动转换 ? ? ? ? ? ? ? ?
概念:自动转换是以强制转换为基础的,遇到以下三种情况的时候,JavaScript会自动转换数据类型,即转换是自动完成的,用户看不见 ? ? ? ? ? ? ? ? - 不同类型的数据互相运算 ? ? ? ? ? ? ? ? - 对非布尔值类型的数据求布尔值 ? ? ? ? ? ? ? ? - 对非数值类型的值使用一元运算符(+和-) ? ? ? ? ? ? ? ? ① 自动转换为布尔值 ? ? ? ? ? ? ? ? ? ? - JavaScript遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值,系统自动调用Boolean()函数 ? ? ? ? ? ? ? ? ② 自动转换为字符串 ? ? ? ? ? ? ? ? ? ? - JavaScript遇到只要有字符串开头的地方,就会将非字符串的参数自动转换为字符串,具体规则是:先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串 ? ? ? ? ? ? ? ? ? ? - 字符串的自动转换,主要发生在字符串的加法运算时,当一个值为字符串,另一个值为非字符串,后者转化成字符串 ? ? ? ? ? ? ? ? ③ 自动转换为数值 ? ? ? ? ? ? ? ? ? ? - JavaScript遇到预期为数值的地方,就会将非字符串的参数自动转换为数值,系统自动调用Number()函数 ? ? ? ? ? ? ? ? ? ? - 除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子转换为数值(加法遇到字符串会优先拼接) ? ? ? ? ? ? ? ? ? ? - 一元运算符也会把运算子转换为数值
?五、其它类型转化为数字类型:
? ? ? ? ? ? ? ? - parseInt() 转化成整数,向下取整 ? ? ? ? ? ? ? ? - parseFloat() 转化成小数/浮点数
? ? ? ? ? ? ? ? - 都只能识别以数值开头的
// 强制转换:Number()
// 数值:转换后还是原来的值
console.log(Number(123));// 123
// 字符串:如果可以被解析为数值,则转换为相应的数值
console.log(Number('3.14'));// 3.14
// 字符串:如果不可以被解析为数值,返回NaN
console.log(Number('3.14JavaScript;js'));// NaN
console.log(Number('JavaScript;js'));// NaN
console.log(Number('JavaScript;jsl3.14'));// NaN
// 空字符串:0
console.log(Number(''));// 0
// 布尔值:true-->1 false-->0
console.log(Number(true));// 1
console.log(Number(false));// 0
// undefined:NaN
console.log(Number(undefined));// NaN
// null:0
console.log(Number(null));// 0
// 强制转换:String()
console.log(String(123));// "123"
console.log(String('abc'));// "abc"
console.log(String(true));// "true"
console.log(String(false));// "false"
console.log(String(undefined));// "undefined"
console.log(String(null));// "null"
var num = 10;
console.log(num.toString());
// 其它转换:parseInt()
console.log(parseInt('3.14'));// 3
console.log(parseInt('9.99'));// 9
console.log(parseInt('3.14JavaScript;js'));// 3
console.log(parseInt('JavaScript;js'));// NaN
console.log(parseInt('JavaScript;js3.14'));// NaN
// 其它转换:parseFloat()
console.log(parseFloat('3.14'));// 3.14
console.log(parseFloat('999'));// 999
console.log(parseFloat('3.14JavaScript;js'));// 3.14
console.log(parseFloat('JavaScript;js'));// NaN
console.log(parseFloat('JavaScript;jsl3.14'));// NaN
// 自动转化
// 不同类型数据互相运算
console.log(123 + 'abc');// '123abc'
// 对非布尔值类型的数据求布尔值
if('abc') {
console.log('hello');//hello(先判断布尔值,字符串是true,所以可以打印)
}
// 对非数值类型的值使用一元运算符(+和-)
console.log(+ {foo: 'bar'});// NaN
console.log(- [1, 2, 3]);// NaN
// 自动转换为字符串
console.log('5' + 1);// '51'
console.log('5' + true);// '5true'
console.log('5' + false);// '5false'
console.log('5' + {});// '5[object Object]'
console.log('5' + []);// '5'
console.log('5' + function() {});// '5function() {}'
console.log('5' + undefined);// '5undefined'
console.log('5' + null);// '5null'
// 自动转换为数值
console.log('5' - '1');// 4
console.log('5' * '5');// 25
console.log(true - 1);// 0
console.log(false - 1);// -1
console.log('5' - 1);// 4
console.log('5' * []);// 0
console.log(false / '5');// 0
console.log('abc' - 1);// NaN
console.log(null + 1);// 1
console.log(undefined + 1);// NaN
// 一元运算符也会把运算子转换为数值
console.log(+'abc');// NaN
console.log(-'abc');// NaN
console.log(+true);// 1
console.log(-false);// -0
|