JS中的数据类型

(一)、基本数据类型(值类型)

1.number:数字

-12、12.5、-12.5 0这些数字都是number;
js中增加了一个number类型的数据:‘NaN’
typeof NaN ->“number”

①"NaN"

not a number:不是一个数,但是属于number类型NaN == NaN :false NaN和任何其它值都不相等

②"isNaN() "

用来检测当前这个值是否是有效数字,如果不是有效数字,检测的结果是true;反之为false
isNaN(0)->false
isNaN(NaN)->trueisNaN(‘12’)–>false 当我们使用isNaN检测值的时候,检测的值不是number类型的,浏览器会默认的把值转化为number类型,然后再去检测

③"Number()"

把其它数据类型值转化为number类型的值;
Number(‘12’) ->12
Number(‘12px’) ->NaN 在使用Number转换的时候只要字符串中出现一个非有效数字字符,最后结果都是NaN;

④Number([])

把引用数据类型转换为number,首先把引用数据类型转换为字符串(toString),在把字符串转换为number即可 例如:[]->’’ ‘’->0

⑤ ‘parseInt()’

把其它数据类型转换为number,和Number方法在处理字符串的时候有区别

parseInt(‘12px13’) -->12 提取规则:从左到右依次查找有效数字字符,直到遇见非有效数字字符为止(不管后面是否还,有都不找了),把找到的转换为数字parseInt(‘px12’) ->NaN

⑥parseFloat()

在parseInt的基础上可以识别小数点

2. string:字符串

-'zhufeng' '珠穆朗玛峰' ->单双引号包裹起来的都是字符串(单双引号没有区别)字符串常用方法charAt charCodeAtsubstr substring slicetoUpperCase toLowerCaseindexOF lastindexOfsplitreplacereplacematch

3. boolean:布尔类型( 只有true 和false俩个值`)

Boolean()

把其它数据类型的值转换为布尔类型
只有“0,NaN,空字符串、null,undefined”这五个数据值转换成布尔类型的false,其余的都为true

'!'

!=;不等于
叹号在JS中还有一个作用:取反,先把值转换成布尔类型,再去取反

③ ‘!!’

在一个叹号取反的基础上在取反,取俩次反相当于没有任何操作,但是已经把其他类型值转换为布尔类型了,和Boolean是相同的效果

4. (null):空对象指针(null是空对象,不是(null),因为不加(),null就是个空对象,不显示了)

现在没有, 以后会有的, 空指针对象

5. undefined:未定义

压根就没有过,现在没有以后也没有0

(二)、引用数据类型

引用数据类型(应运而生){} [] Date RegExp fn .

1.object对象数据类型

对象 是复合数据的载体, 用{}包起来, 内容是一对一对的键值对(属性名: 属性值)
这里的冒号相当于 等号 是赋值的意思,不同的键值对之间用逗号隔开③ 属性名 对应 咱们变量名 (但是属性名可以是数字,也不能是数字开头的字符)④: 对应咱们的 等号⑤ /属性值 对应咱们的 变量的值(可以是任意的数据类型)

var per = { c"name":'zfpx',1:'wwww',age:9,bol: true,hobby:{hobby1:'play',hobby2: 'read'},fn: function () {}};var per2 = {name:'小明','name':'小红',age:12,age: 15,2:13,'2':18};console.log(per2["name"],per2.name);

对象的 增 删 改 查

(1)查
如果属性名是数字的话 我们再获取该属性对应的属性值的时候只能用 [] 的这种方式(属性名可以带引号 也可以不带引号(不区分单双); 带不带引号,表示的都是一个属性)

// 1、 打点的方式 (从属关系)per.name;console.log(per2[2]);//当属性名是数字的时候 我们只能用 [] 的方式获取//2、中括号的方式console.log(per['name']);var name1 = 'age';console.log(per[name1],per.name1,per["name1"],per[1],per["1"]);var name2 = 'hobby';console.log(per[name2].hobby1,per.name,per["bol"]);console.log(per[name2][12222222]);console.log(per[name2]['hobby1']);per[name] //--> per['age'] -- > 9  per.age//定义属性时,属性名的引号可带可不带//调用时,若是通过打点的方式获取某个属性对应的值,我们不能给这个属性加引号//若是通过 [] 的方式获取某个属性对应的值,我们必须用引号把这个属性名包起来//如果不用引号包起来,则 [] 内代表的是变量对应的值;//若属性名是数字的时候, 我们必须用 [] 的方式获取该属性对应的值,这时的数字属性名的引号可加可不加

(2)给对象添加 一项()

var user = {name:'xiaoming',password:'1234'};

(3)修改对象(直接给属性名重新赋值)

user.name = 'xm1';

当这个对象里边有这个属性的时候,我们再重新赋值时,是相当于修改这个属性对应的属性值
当这个对象里边没有这个属性时,我们给这个属性赋值时,就相当于给这个对象添加了这个属性(4)对象的属性的删除
1、真删除 2、假删除

2. [] 数组

数组的每一项都有一个属性名(数组本身就是一个对象,他只是对象的一个细分)跟他对应。这里的属性名(依次递增的数字) 我们叫做索引
数组对象的作用是:使用单独的变量名来存储一系列的值。

[12,23,34]var ary = [1,true,'qqq',null,undefined,{q:1},function(){console.log(2)},sum,sum()];var ary2 = [sum,sum()];// [sum,NaN]var  t = sum();//NaNvar ary3 = [sum,t,'t'];//[sum,NaN,'t']// 数组里的变量,我们是要把对应的变量值放到相应的位置// obj[name]//对象中的查看 打点  ['']// 数组本身也因该有打点和 [''] 两种方式 ,但是 对象中 数字的属性名,我们只能用 [''][]的方式,所以数组中的查看我们只能用 [''][]// console.log(ary['8'],ary[8]);

3. 正则

正则:就是用来处理字符串的一种规则
处理字符串的两种方式
一种是匹配 test; 编写了一个正则;用这个正则去查看这个字符串是否满足你的规则;
另一种是捕获 exec;编写一个正则;然后去字符串中获取满足你规则的字符串
-/^-?(d|([1-9]d+))(.d+)?$/ /*匹配有效数的正则*/

var reg = /-/;//字面量的声明定义方式var reg2 = new RegExp('-');// 构造函数式的定义方式console.log(reg, reg2);console.log(reg == reg2);//false//用上边字面量方式 生成的正则 ;两个斜杠中的内容叫做 元字符var reg = / /;// 元字符  修饰符// 修饰符// i ignoreCase : 忽略大小写// m multiline : 多行匹配// g global : 全局匹配//特殊意义的元字符//  :转义的意思; 把在正则里有特殊意义的字符 转成 字符本身// . :除了换行以外的所有字符;// d: 代表 0~9 之间的数字// D: 代表除了0~9以外的字符// w: 数字 字母 下划线// |W: 除了 数字 字母 下划线 以外的字符//[a-z]:a到z之间的任意字母//[A-Z]://[A-z]//[abc]: a,b,c中的任意一个// a|b : a或者b//[^abc]: 除了 abc 以外的任意字符//[^a-z]: 除了 小写字母 以外的任意字符// 量词元字符var reg = /d+/;// + : 代表前边的字符出现一次或者多次// * :代表前边的字符出现零次或者多次// ? : 代表前边的字符出现零次或者一次//{n}: 代表前边的字符出现n次//{n,}:代表前边的字符最少出现n次//{n,m}:代表前边的字符出现 n到m次//^  $var reg = /^d+$/; //23424253//^ 代表字符串以什么开头//$ 代表字符串以什么结尾// () 在正则里边代表分组// ?: -–> 代表只匹配 不捕获// ?= -–> 正向预查// ?! -–> 负向预查// s : 空白符// n : 换行符

4. function函数数据类型

//我们要用函数的原因// 1、 节省代码// 2、 高内聚(把东西缩到一块,这一块就是为了实现某个功能,跟其他代码没有任何联系) 低耦合(跟其他代码没关联)// 函数的 语法/** 1、function 函数名(){*      函数体* }** 2、var 函数名 = function [函数名-可写可不写](){*       函数体* }** 第一种声明方式, 我们在声明的代码的之前调用这个函数* 第二种声明方式,  我们只能在声明的代码之后调用** 函数声明之后 可以无限次调用** return //返回的意思** */clearRoom();//函数的调用  -->  函数名()function clearRoom() {console.log('收拾桌子');console.log('收拾卧室');console.log('出门');}// clearRoom();// clearPer();var clearPer  = function (){console.log('洗脸');console.log('刷牙');console.log('穿鞋');return '出门';// return 什么 那函数执行完 返给外界的就是啥};var a = clearPer();//把函数执行的结果赋值给 aconsole.log(a);// clearPer();

检测数据类型方法

1. typeof: 检测数据类型的运算符

使用typeof检测,返回的结果是一个字符串,字符串中包含的内容证明了值是属于什么类型的;【局限性】
①.typeof null 不是‘null’而是’object’,因为null虽然是单独的一个数据类型,但是它原本意思就是空对象指针,浏览器使用typeof检测的时候会把它按照对象来检测;
②.使用typeof无法具体细分出到底是数组还是正则,因为返回的结果都是’object’

typeof  12 => 'number'var num =12;
typeof num => 'number'

课外扩展(腾讯面试题)

console.log(typeof typeof [])
typeof [] ->‘object’
typeof “object” -> “string”

2. instanceof:检测某个实例是否属于这个类

3. constructor 获取当前实例的构造器

4. Object.prototype.toString.call:获取当前实例的所属类信息

作者:志若鸿鹄,尺步寸微
链接:前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法_志若鸿鹄,尺步寸微的博客-CSDN博客_前端基本数据类型
来源:CSDN

ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...相关推荐

  1. vue调用 webVideoCtrl.js 海康设备调试 无法获取未定义或 null 引用的属性“HWP_SubmitHttpRequest”

    海康网页端开发遇到 无法获取未定义或 null 引用的属性"HWP_SubmitHttpRequest" 经过代码调试后,发现原因: 没有指定视频展示对应的div 解决方法: // ...

  2. SCRIPT5007: 无法获取未定义或 null 引用的属性“call”

    问题 ie浏览器中打开vue项目时报错:SCRIPT5007: 无法获取未定义或 null 引用的属性"call" 解决方法 1.确保webpack版本在 2.6.1以上 2.安装 ...

  3. JavaScript 运行时错误: 无法获取未定义或 null 一种解决方案

    JavaScript 运行时错误: 无法获取未定义或 null 一种解决方案 参考文章: (1)JavaScript 运行时错误: 无法获取未定义或 null 一种解决方案 (2)https://ww ...

  4. 无法获取未定义或 null 引用的属性“text”_【CSS】是时候开始用 CSS 自定义属性了...

    自定义属性(有时候也被称作CSS变量或者级联变量)是由CSS作者定义的,它包含的值可以在整个文档中重复使用.由自定义属性标记设定值(比如:--main-color: black;),由var() 函数 ...

  5. 无法获取未定义或 null 引用的属性“value”_SpringBoot之Spring@Value属性注入使用详解

    在使用Spring框架的项目中,@Value是使用比较频繁的注解之一,它的作用是将配置文件中key对应的值赋值给它标注的属性.在日常使用中我们常用的功能都比较简单,本篇文章系统的带大家来了解一下@Va ...

  6. 无法获取未定义或 null 引用的属性“title”_JDK中四种对象引用类型

    JDK1.2之前,一个对象只有"已被引用"和"未被引用"两种状态,这将无法描述某些特殊情况下的对象,比如,当内存充足时需要保留,而内存紧张时才需要被抛弃的一类对 ...

  7. 【Javascript报错】无法获取未定义或 null 引用的属性“replace“

    今天在处理前端字符串替换的问题中 使用了这段代码: str.replace("xx","xx") 报错 >>  是因为str没获取到 str = u ...

  8. 使用阿里妈妈字体图标库,ie10报错,无法获取未定义或 null 引用的属性“firstChild”

    前因:公司优化页面,要把彩色图片,换成字体图标. 结果:更换完后,测试发现ie10,ie9都会报错,但demo测试是没有问题的. 测试:console.log(target)为null,找到docum ...

  9. DataTables在IE8下报'style' 为空或不是对象错误问题 , SCRIPT5007: 无法获取未定义或 null 引用的属性“style”

    网页错误详细信息: 消息: 'style' 为空或不是对象 行: 5570 字符: 5 代码: 0 检查后才发现,问题在于数组最后多了一个",",会造成Table列数计算时多了一列 ...

最新文章

  1. IOS类似9.png
  2. Linux中的umask
  3. [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点
  4. 【自适应盲均衡4】基于RLS的多径衰落信道均衡算法(RLS-CMA)的理论推导与MATLAB仿真
  5. Qlik 助力安井食品实现企业智能决策、高效运营
  6. byte 类型比较_基本类型和包装类对象使用 == 和 equals进行比较的结果?
  7. python的使用说明_Python教程:Python中__init__.py的使用用法说明
  8. 一下代码不符合php,各位帮我看看哪里错了一直提示错误,谢谢大家。可把代码复制一下...
  9. mysql查询,left join(求并集),where(求交集)
  10. 如何做好项目的需求与业务调研?
  11. QQ目录下各文件用途不完全揭密
  12. 动力电池集成关键技术及电池测试与验证
  13. 纪念第一次2019河南省第十二届ACM大赛之旅
  14. win7访问linux共享没有权限设置,局域网共享时提示:你没有权限访问,请与网络管理员联系...
  15. 校园 计算机网络设置路由器,GSWiFi路由器校园网怎么设置
  16. 在CentOS上MySQL数据库服务器配置方法
  17. 1449异常 mysql_mysql异常-UncategorizedSQLException 1449
  18. 用户运营实战:打造流失用户召回体系
  19. 安装php vcruntime140,win7安装apache或者php 5.7缺少vcruntime140.dll的问题
  20. 人工智能培训机构哪个好?求求你们别再去培训机构学假的人工智能了!

热门文章

  1. windows平台下用CMake工具编译osg用法说明
  2. php数组foreach循环添加键值对_在PHP的foreach循环中插入一个$key作为变量
  3. java中bean的定义有哪些_详解Java的Spring框架中bean的定义以及生命周期
  4. linux 搭建任务队列集群,beanstalkd任务队列 linux平台安装测试
  5. 东风本田crv2020新款混动说明书_能上绿牌,无续航焦虑!2020北京车展混动新车抢先看...
  6. 【BIRT】使用rptlibrary设置统一数据源
  7. LVM逻辑卷的管理--创建LVM、扩容,快照实战
  8. 4-具体学习git--分支
  9. This generally means that another instance of this process was already runni
  10. 我的SharpDevelop插件之一:知识管理器(2006年博客迁移)