天行健,君子以自强不息;地势坤,君子以厚德载物;
2021-2-22 博主:Splendor JavaScript笔记
类型、值和变量运算符 | 描述 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
** | 幂 |
/ | 除法 |
% | 系数 |
++ | 递增 |
-- | 递减 |
var x=0.3-0.2; //0.09999999999999998 var y=0.2-0.1; //0.1 x==y //false 两值不相等1.5日期和时间
var d = new Date(); //Mon Feb 22 2021 14:18:32 GMT+0800 (中国標準時)1.6文本
"" //空字符串:包含0个字符 'test' "34434" 'wo="我"' //单引号定界中可以包含双引号 "ni='你'" //双引号定界中可以包含单引号1.8转义字符
代码 | 结果 |
---|---|
\b | 退格键 |
\f | 换页 |
\n | 新行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
msg="Hello" + 123 //Hello123 msg=2+3+4+"456" //9456 msg="wo" + "ai" + ”ni" // woaini msg="452"+2+3+1 //452231
2.0布尔值
布尔值指代真或假,开或关,是或否。这个类型只有两个值true和false
在JS中的值都可以转换为布尔值,下面这些值会被转换成false;除了下面的值其它值都可以转换成true真值
undefind
null
0
-0
NaN
""//空字符串
2.1 null和undefined
null 表示空值 typeof值为object
undefined 表示值的未定义 typeof值为undefined
null==undefined //true
null === undefined //false
2.2 全局对象
全局对象的属性是全局定义的符号,JS程序可以直接使用。当JS解释器启动时,它将创建一个新的全局对象,并给他一组定义初始属性:
var ss="nihao"; var newSs=ss.substring(2,3) //h字符串不是一个对象怎么有了属性呢?在JS中只要引用了字符串s的属性,JS解释器就会把他自动包装成一个对象,通过new String(s)方法在解释器中自动完成。一旦属性引用结束,这个新创建的对象就会被自动销毁。
var s="woaini"; s.toUpperCase() //返回WOAINI,只是创建了一个新的字符串 s //但打印s值却是woaini,原始字符串并未改变JS中对象和原始值不同,首先,对象是可变的,值是可以修改的:
var o={x:1}; //定义一个对象 o.x=2; //修改对象属性 o.y=3; //再次更改这个对象,给它增加一个新属性对象的比较:即使两个对象包含同样的属性及相同的值,它们也是不相等的。各个索引元素完全相等的两个数组也不相等:
var o={x:1},p={x:1}; o===p; //false var a=[1,2],b=[1,2]; a===b; //false2.5 类型转换
10 + "abc" //10abc 数字10转换为字符串 "7" * "5" //35 JS将乘号左右转換为数字 var b=1-"x" //NaN 字符串x无法转换为数字 b+"aaa" //NaNaaa JS将NaN转換为字符串2.6 转换和相等性
null == undefined //true "0"==0 //true 0 == false //true "0" == false //true
Number("3") // 3 String(false) // "false" Boolean([]) // true 空对象{}和空数组[]在JS中都会转换成true Object(3) // new Number(3)2.8 对象转换为原始值
var i; var iSum; var i,iSum; var i=1,j=0,k=0;注:如果未在var声明语句中给变量定初始值,那么虽然声明了这个变量,但在给它存入值之前,调用它时他的值是undefined
var a="global"; //声明一个全局变量 function fun(){ // 定义一个fun函数 var a="local"; //声明一个局部变量a return a; //此时a返回的是"local" } fun(); // "local"
a="global"; //声明一个全局变量 function fun(){ //定义一个fun函数 a="local"; //函数体内声明了一个全局变量 return a; //返回local } fun(); //调用函数 a //此时全局变量被函数体内的a变量替换成”local"例3:函数定义是可以嵌套的。由于每个函数都有它自己的做用域,因此会出现几个局部作用域嵌套的情况。
var a="global string"; //声明全局变量 function fun1(){ var a="local string"; //声明局部变量 function fun2(){ var a="nested string"; //嵌套作用域内的局部变量 return a; //返回当前作用域内的值 } return fun2 } fun1() //"nested string"
function test(ik){ var i=0; //i在整个函数体内都是有效定义 if(ik>0){ var j=0; //j在整个函数体内都是有效定义 for(var k=0;k<10;k++){ //k在整个函数体内都是有效定义 console.log(k); //输出1~9 } console.log(k); //输出10,k循环到10时跳出循环但此时k的值是10 } console.log(j); //j在定义时赋值0此时也为0 }JS的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。这就意味着变量在声明之前甚至已经可以使用。JS这个特性被非正式的称为声明提前,也就是JS函数里声明的所有变量(不涉及赋值)都被“提前”至函数体的顶部:
var aa="global"; //定义一个全局变量 function f(){ //定义一个函数 console.log(aa); //打印变量aa,此时aa没有被定义结果为undefined var aa="local"; //声名局部变量aa,此时局部变量aa,替换全局变量aa的值 console.log(aa); //打印aa值 } f(); //输出 undefined local分析:
function f(){ var aa; //在函数体内相当于提前到函数顶部声明变量 console.log(aa); //在函数顶部声明了变量但还没有赋值,所以输出undefined aa="local"; //此时变量赋值初始化 console.log(aa); //输出初始化后的值“local” }
标签: JavaScript笔记