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不是数字,或无法隐式转为数字,返回falseundefined:所以未赋值的变量的默认值。
null:主动释放或清空一个变量中的值。
底层其实一样
null==undefined 返回true
全等===:类型相同,且数值相等
不带隐式转换
问题:如果参与比较的是不同类型,就要手动强制转换再比较。
何时使用:区分null和undefined(见下)
基础类型和高级类型比较
对于string,number等基础类型,==和===是有区别的
1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样对于Array,Object等高级类型,==和===是没有区别的
进行“指针地址”比较
基础类型与高级类型,==和===是有区别的
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
- js中的数据类型
- JS中的数据类型
- js中的数据类型
- 判断js中的数据类型
- js中的数据类型
- js中的数据类型转换
- 【js】:javascript中的数据类型
- js中的数据类型
- 关于js中的数据类型
- js中的数据类型
- js中的数据类型
- JS中的Symbol数据类型
- js中的数据类型
- js中的数据类型
- 关于JS中的数据类型
- js中的基本数据类型
- JS中的数据类型
- 判断js中的数据类型
- Spring Boot 支持多种外部配置方式
- 几种云笔记插入代码的使用体验对比
- org.hibernate.MappingException: Unknown entity错误
- Hibernate_二级缓存1_初步使用
- C/C++之回调函数
- js中的数据类型
- 161.n1-解析json中的数据传递给左边的侧边栏
- 等直杆的纵向振动固有模态
- 利用Highcharts创建SVG图片并转为PNG(前端页面)
- CentOS7 变更默认主机名bogon
- ffmpeg之入门---》编译
- 《大型网站技术架构》网站的高性能架构及优化
- Effective Java读书笔记十五(Java Tips.Day.15)
- java 中访问控制符