js中的数据类型

来源:互联网 发布:java集合框架容器 编辑:程序博客网 时间:2024/06/03 18:54

数据类型

变量的特殊情况

1.仅声明的变量,未赋值,默认undefined; // var a;2.未声明,直接赋值,相当于自动赋一个window.同名变量。// b='不声明';

*声明提前:在正式执行脚本之前,将所以var声明的变量,提前到(当前作用域)顶部,集中声明创建。然后再开始执行程序。赋值留在本地

数据类型

原始类型:值直接保存在变量本地的数据类型。

5种:Number String Boolean undefined null。

1.Number:JS中专门存储数字的类型,即可存整数,也可存浮点数(小数)。
舍入误差:因为计算机中也有无法除尽的,导致计算误差,舍入误差无法避免哦。近似解决:添加.toFixed(2)。
整数:32Bit- ->4bytes 浮点数64Bit- ->8bytes
1byte字节=8Bit位 1kb=1024bytes

2.String:专门保存一串字符的序列,必须带引号(不区分单双引号)
所占空间:字符串中每个字符都用unicode号存储的
unicode号:对全球主要文字中的字符,每个字符编一个号。
英文字符,数字:<=126,占一个字节
汉字字符:19968 ~ 40869,占2个字节
\u4e99 ~ \u9fa5
*字符串的内容一旦创建,不可改变!要想改变,只能用另一个新字符串替换!

3.Boolean:布尔类型:只有两个值的数据类型:true/false
何时使用:表示二选一的时候

4.undefined:只有一个值,他本身。
何时使用:变量未赋值时,自动赋值使用。

引用类型:值不直接保存在变量本地的数据类型

数据类型的转换

js是弱类型语言:3方面:

1.声明变量时,不需要规定变量存储的数据类型
2.赋值时,才动态判断数据的类型。
同一个变量,先后可保存不同类型的值。
3.js会在需要时,自动转换数据的类型。


大类转换方式:隐式转换和强制转换
1.隐式转换:js自动完成的类型转换。
仅讨论算数计算中的隐式转换:

1)算数计算中,一切数据都默认转换成数字,再计算。
如果是Boolean类型:true–>1 false–>0,但是遇到+和字符串true—>“true”
特殊情况:如果数据无法被转为数字类型,会被转为NaN:Not a Number。NaN不等于,不大于,不小于任何值;NaN参与任何算术运算永远结果为NaN。
2)在+运算中,在碰到字符串,+就变为字符串拼接,另一个不是字符串的数据,被自动转为字符串
表达式:变量,数据和运算符组成的公式;默认都是从左到右,两两运算;任何表达式都要1个运算结果。
1.强制转换:主动调用专门的函数,执行转换。
何时使用:自动转换的类型,不是想要的。
任意–>字符串:2个API;
x.toString();x不是undefined和null。
String(x);这其实相当与隐式转换。
typeof(x)–>返回数据类型

var fn = new Function('console.log("Hello World!")');console.log(typeof  fn);//返回f的类型var a = new Number(1);console.log(a instanceof  Number);//返回布尔值

任意–>数字:3个API;
Number(x):专门将非字符串类型转换为数字,这相当于隐式转换。
将字符串转为数字:2个API
parseInt(str):从第一个字符开始,依次读取每个数字,只要碰到第一个非数字字符就停止,自动跳过开头的空字符。*不认识小数点。
何时使用:将字符串转为整数时
parseFloat(str):用法同于parseInt。浮点数*认识第一个小数点。
何时使用:将字符串转为小数时。
任意类型—>Boolean:Boolean(x)—>相当于隐式转换。

只有5个值转为false:“” NaN undefined null 0 其他都转true!

任意转换:任意转String:x+”;任意转Boolean:!!x

/* !!强转为bool值 * */var str='';console.log(!!str);//false

短路逻辑:如果前一个条件已经可以得出最终结论,则后续条件不再执行!
利用短路逻辑时,逻辑运算不一定都返回true/false
&&:1个条件,一件事,满足就做,不满足就不做
if(条件){事}
利用短路逻辑: 条件&&(事)
何时使用短路代替if:只有操作步骤简单时。

强调:&&后的语句,一般用()包裹
||:在两个值之间二选一使用,相当于默认值/备用值
值1||值2 : 如果值1有效(Boolean(值1)为true)就使用值1,否则使用值2作为备用

function add(i,j) {            j = j||0;//使用短路逻辑(||)为变量赋初值            console.error(i + j);}add(43);逻辑运算中隐式转换:默认都转为Boolean类型()  鄙视题:alert(4&&5);//5        alert(4||5);//4        alert(0&&5);//0        alert(0||5);//5

位运算

位运算:移动数据的二进制位置   左移: m<<n 读作m左移n位,相当于m* 2的n次方   右移: m>>n 读作m右移n位,相当于m/ 2的n次方   无符号右移0位: m>>>0 相当于取整!

特殊关系运算

  • 判断是不是NaN:不能用==判断

    var bool=!isNaN(num)
    何时使用:判断num是不是数字
    如果num是数字,或可以隐式转为数字,返回true
    如果num不是数字,或无法隐式转为数字,返回false

  • undefined:所以未赋值的变量的默认值。
    null:主动释放或清空一个变量中的值。
    底层其实一样
    null==undefined 返回true
    全等===:类型相同,且数值相等
    不带隐式转换
    问题:如果参与比较的是不同类型,就要手动强制转换再比较。
    何时使用:区分null和undefined(见下)

基础类型和高级类型比较

  1. 对于string,number等基础类型,==和===是有区别的

    1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
    2)同类型比较,直接进行“值”比较,两者结果一样

  2. 对于Array,Object等高级类型,==和===是没有区别的

    进行“指针地址”比较

  3. 基础类型与高级类型,==和===是有区别的
    1)对于==,将高级转化为基础类型,进行“值”比较
    2)因为类型不同,===结果为false

eg:
对象与简单类型区别

var str ='hello world';var obj = new String('hello world');/*比较值时候* == 比较的是值* === 比较的是类型* */console.log(obj == str);//trueconsole.log(obj === str);//false/*对象拥有属性,基本类型没有* */str.i=30;obj.i=30;console.log(str.i + ";" + obj.i);//undefined;30//类似java的自动装箱--所以性能优化处理方案是str=new String(str);console.log(str.length);//11
1 0
原创粉丝点击