一.***数据类型转换:
1. ***js是弱类型编程语言:3点:
1.声明变量时,不用考虑变量中将要存储的数据类型
2.赋值时,动态判断数据的类型,同一个变量,先后可保存不同类型的数据。
3.运算时,js会根据自己的需要,动态转换数据类型
2.大类:
1.隐式转换:无需程序员干预,而自动完成的转换。
先讨论算数运算中的隐式转换:
规律:
1.默认情况下,一切转数字类型,做算数计算
boolean类型,true-->1 flase-->0
2.+法中,只要有一个字符串,都转为字符串,+变为字符串拼接
例:
var n1= 2,n2=3;
s1="2",s2="3",
b1=true,b2=false;
console.log(n1+n2);//5
console.log(s1+n2);//23
console.log(s2-n1);//1
console.log(s2-b1);//2
console.log(s1*b2);//0
console.log(b1+b2);//1
console.log(s1+b2);//2false
从左向右两两计算
console.log(n1+s2+b1);//23true
console.log(n1+b1+s2);//33
表达式:由数据,变量和运算符组成的公式
*默认,从左向右,两两计算
NaN:“不是一个数字”的数字,
=Not a Number
何时遇到:当无法转为数字时,或无法正常计算时,结果为NaN
特点:和任何数据做计算,结果永远为NaN
加法计算中,碰上字符串,也会被字符化“NaN”
var s="Hello";
var n=NaN;
console.log(s-n);
-->结果为NaN
typeof(x);返回x的数据类型名称:Number String Boolean Undefined
2.强制转换:程序员主动调用专门的函数完成的转换
1.任意 to String:2种:
var str=x.string();
var str=String(x); -->相当于隐式转换
区别:***String(x); 万能方法;
x.string();对于null和undefinded转不了
何时使用:通常都是js在需要时,自动调用;
2.***任意 to Number :3种:
1.任意 to Number:var n=Number(x); --隐式
何时使用:将非字串类型转为数字类型时使用
将纯字符串组成的字符串转为数字类型时
特例:Number(" ") -->0
2.String to Number:
1. to 整数:var n= parselnt(String(str));
何时使用:将*字符串*转为整数时使用
如果传人的不是字符串,则先隐式转为String
原理:从头开始读取字符串中每个字符,跳过开头的空字符,只读取数字字符,只要碰到第一个不是数字的字符,就退出;不认识小数点。
console.log(parseInt("12px"));//12
console.log(parseInt("1 2px"));//1
console.log(parseInt("12.5px"));//12
console.log(parseInt("$12"));//NaN
console.log(parseInt(true));//NaN
console.log(parseInt("true"));//NaN
对比:Number(x) vs pareslnt(str)
Number只认识纯数字组成的数字串,可转Bool类型
pareslnt(str)认识包含非数字字符的字符串开头位置的数字,无法转换Bool类型
2.String to 浮点数:var n=parseFloat(str);
何时使用:只要将字符串转为小数时,用法和parselnt用法完全一样,之刃第一个碰到的小数点。
3.任意类型 to Boolean: var Bool=Boolean(x);
" " 0 NaN underfined null --> false
其他都是true
3.运算符和表达式:(隐式转换,默认都转为number);
程序:人的想法在计算机中的执行步骤
运算符:程序中模拟人的思维运算或判断的符号
表达式:由数据,变量,和运算符组成的公式
算数运算符:+ - * % ++ --
%模运算(取余数):m%n:m/n,取 除不尽的余数部分
何时:
1.判断能否整除:
比如:判断奇偶数:m%2等于0,说明m是偶数;m%2不等于0,说明m是奇数;
2.限制计算结果,永远小于除数;
***递增,递减运算:++ --
n++:n=n+1;将n中的值+1,再保存回n中
2种情况:
++n:前++,先将n中的值+1,返回*新*值
n++:后++,将n中的值+1,返回*旧*值
++n或n++,单独使用,无影响;
但是参与其他表达式中时,会影响执行结果:
var my=10;
var lp=my++;
console.log(lp);//10
console.log(my);//11
var lp=++my;
console.log(lp);//11
console.log(my);//11
笔试题:
var n=3;
console.log(n++ + ++n + n++);//从左往右依次相加,n值页进行累计 3+5+5=13
console.log(++n +n++ + ++n);//从左往右依次,7+7+9=23
console.log(n);//9
***运算关系:做比较,比大小 --> >< <= <= != ==都带有隐式转换
返回值:true false
隐式转换:默认都转为数字再比较
特殊情况:
1.如果无法转为数字:转为NaN
NaN不等于,不大于,不小于任何值,甚至自己 -->NaN!=x -->true
isNaN(num):专门判断一个num数值是否为NaN;如果是NaN,就返回true;否则返回false
何时使用:只要判断一个数值无效,就用isNaN
开发中何时使用:反着用
用isNaN判断一个num是不是数字,或是否能被隐式转为数字使用
isNaN(num):返回true -->num是数字
返回false -->num不是数字
2.比较
undefined vs null
underfined:所有变量的默认初始值,自动赋值
null:主动清空一个变量,释放一个对象
例:
var n;var m=null;console.log(n==m); -->true
var n;var m=null;console.log(n===m); -->false
typeof(undefined) -->underfined
typeof(null) -->object
===:全等,严格相等,首先类型必须相同,其次值相同
何时使用:要求类型相同,且值相等
3.如果参加比较的两个值都是字符串类型,不再转数字,而是pk每个字符的unicode号
(怎么判断中午的unicode)“李”.charCodeAT(0)
凡是条件:一般都是关系运算或逻辑运算
****逻辑运算:多个条件(关系运算),综合得出最后的结论,只能返回true/false
隐式转换:默认转换为bool类型:boolean(x) null NaN underfined 0 " "空 转换为false
何时使用:只要综合多个条件,得出最终结论
如何使用:3种:
&&:读作且,程序中称之为“逻辑与”
条件1&&条件2:必须条件1和条件2都为true,结果才为true,只要任意一个为false,结果就为false
||:读作或,程序中称之为“逻辑或”
条件1||条件2只要:任意一个条件为true,结果就为true,只有所有条件都为false,结果才为false
!:读作不,程序中称之为“逻辑非”
!条件:颠倒条件的true或者false的结果
使用套路:
***短路逻辑:逻辑运算中,如果前一个条件已经可以得出结论,则后续所有条件不再执行
***利用短路逻辑实现按条件执行语句:条件&&操作:如果条件满足,则执行操作;否则,什么也不做
逻辑与: 1个条件,1件事,满足就做,不满足就不做
逻辑或:值1||值2:如果值1有效,就返回值1,否则返回值2
笔试题:
4&&5;//5
4||5;//4
0&&5;//0
0||5;//5
何时使用:1个条件,1件事,满足就做,不满足就不做
var total=400;
total>=500&&(total=total*0.8);
console.log("实际收款:"+total);
利用逻辑或实现默认值效果,或者实现二选一取值效果:
值1||值2:如果值1有效,就返回值1,否则返回值2
var reply=prompt("请用户输入回复");
console.log(reply||"主人很懒");
(了解即可)位运算:将数值的二进制左移或者右移n位
左移n位:相当于*2的n次方
右移n位:相当于/2的n次方
*赋值运算:基本赋值运算:=
所有表达式都会返回一个结果
***赋值运算的结果,是等号右侧表达式的值
(扩展)赋值运算:对变量内部的值进行修改的简写方法
比如:total=total*0.8 --> total*=0.8
何时使用扩展赋值运算:需要修改变量中的值,再存回变量中
包括:+= -= *= /= %= 用法完全一样
***三目运算:根据不同条件,判断执行不同操作,或返回不同的值
三目运算 即 条件运算
何时使用:多个条件,多件事,必须多选一执行
如何使用:
条件1?操作1:
条件2?操作2:
more?more。。。。
特点:
1.如果前一个条件已经满足,则不再向下判断,保证每次只能有一个操作被执行
原文地址:http://9140644.blog.51cto.com/9130644/1882515