-12、12.5、-12.5 0这些数字都是number;
js中增加了一个number类型的数据:‘NaN’
typeof NaN ->“number”
not a number:不是一个数,但是属于number类型
NaN == NaN :false NaN和任何其它值都不相等
用来检测当前这个值是否是有效数字,如果不是有效数字,检测的结果是true;反之为false
isNaN(0)->false
isNaN(NaN)->true
isNaN(‘12’)–>false 当我们使用isNaN检测值的时候,检测的值不是number类型的,浏览器会默认的把值转化为number类型,然后再去检测
把其它数据类型值转化为number类型的值;
Number(‘12’) ->12
Number(‘12px’) ->NaN 在使用Number转换的时候只要字符串中出现一个非有效数字字符,最后结果都是NaN;
把引用数据类型转换为number,首先把引用数据类型转换为字符串(toString),在把字符串转换为number即可 例如:[]->’’ ‘’->0
把其它数据类型转换为number,和Number方法在处理字符串的时候有区别
parseInt(‘12px13’) -->12 提取规则:从左到右依次查找有效数字字符,直到遇见非有效数字字符为止(不管后面是否还,有都不找了),把找到的转换为数字
parseInt(‘px12’) ->NaN
-'zhufeng' '珠穆朗玛峰' ->单双引号包裹起来的都是字符串(单双引号没有区别)
字符串常用方法
charAt charCodeAt
substr substring slice
toUpperCase toLowerCase
indexOF lastindexOf
split
replace
replace
match
…
把其它数据类型的值转换为布尔类型
只有“0,NaN,空字符串、null,undefined”这五个数据值转换成布尔类型的false,其余的都为true
!=;不等于
叹号在JS中还有一个作用:取反,先把值转换成布尔类型,再去取反
在一个叹号取反的基础上在取反,取俩次反相当于没有任何操作,但是已经把其他类型值转换为布尔类型了,和Boolean是相同的效果
现在没有, 以后会有的, 空指针对象
压根就没有过,现在没有以后也没有0
引用数据类型(应运而生){} [] Date RegExp fn .…
① 对象 是复合数据的载体, 用{}包起来, 内容是一对一对的键值对(属性名: 属性值)
② 这里的冒号相当于 等号 是赋值的意思,不同的键值对之间用逗号隔开
③ 属性名 对应 咱们变量名 (但是属性名可以是数字,也不能是数字开头的字符)
④: 对应咱们的 等号
⑤ /属性值 对应咱们的 变量的值(可以是任意的数据类型)
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、假删除
数组的每一项都有一个属性名(数组本身就是一个对象,他只是对象的一个细分)跟他对应。这里的属性名(依次递增的数字) 我们叫做索引
数组对象的作用是:使用单独的变量名来存储一系列的值。
[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();//NaN
var ary3 = [sum,t,'t'];//[sum,NaN,'t']
// 数组里的变量,我们是要把对应的变量值放到相应的位置
// obj[name]
//对象中的查看 打点 ['']
// 数组本身也因该有打点和 [''] 两种方式 ,但是 对象中 数字的属性名,我们只能用 [''][]的方式,所以数组中的查看我们只能用 [''][]
// console.log(ary['8'],ary[8]);
正则:就是用来处理字符串的一种规则
处理字符串的两种方式
一种是匹配 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 : 换行符
//我们要用函数的原因
// 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();//把函数执行的结果赋值给 a
console.log(a);
// clearPer();
使用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”