本人原为Java工程师一枚,正如我的博客名,菜到不行,自己考虑了好久,发现自己还是对前端更感兴趣。正因为学过点Java,所以学起JavaScript来,感觉要比较简单,但是也没有别人说的那么简单,所以想试着写点博客,以后有不会的随时能够翻自己的博客,大神请绕行。我这篇文章是写的我记不太住的东西,我感觉简单的东西就一笔带过。这篇只是开头,还会有后续。欢迎大家找我讨论问题。QQ:1510898414
1、获取浏览器当前版本:window.navigator.userAgent
2、数据类型:
1.原始类型:Number、String、Boolean、undefined、null
2.引用类型:值没有直接保存在变量本地的类型
变量中只保存指向实际数据所在位置的地址值
3、数据类型转换:
toString():无法转换null和undefined
String(X);
X.toString(); ----à String类型特有
底层实现原理:function String(x){
if(x==undefined){
return “undefined”;
}else if(x==”null”){
return “null”;
}else{
return x.toString();
}
}
特殊:十进制转二进制:var i=500; console.log(i.toString(2));
所占空间:每个英文字母和数字占1个字节
每个汉字占两个字节。
js在内存中都是用字符的Unicode码号储存字符的。
字符串是不能够被修改的。
转义字符:
\n : 换行
\r : 回车(非换行,接收指令)
\t : 制表符
\' : '
\" : "
\\ : \
Number类型:
Number(X);
几个特殊转换:
Number(“”);--à0
Number(null);--à0
Number([]);--à0
Number(undefined);--àNaN
Number(true);--à1
Number(false);--à0
特殊:n.toFixed();
按照指定小数位进行四舍五入
parseInt(str);
从头开始,跳过开头的空字符,碰到第一个非数字字符退出。
固定套路:去掉字符串中数字之后的单位
问题:不认识小数点,去掉小数部分。
解决:parseFloat(str);
只认识第一个小数点,能够转为整数则转为整数,无法转为整数就转为浮点数。
如若想要去除小数位,就用parseInt否则用parseFloat
Boolean(x);
只有0,undefined,null,NaN,””,转为false
其余转为true。
NaN:
isNaN(num);判断num是否为NaN,返回true则x不是数字,返回false则为数字。
NaN不大于不小于不等于任何值
NaN!=X永远返回false
undefined和null比较
undefined:所有变量的初始值。
null:主动清空一个变量,释放对象。
区别:typeOf(undefined)èundefined
typeOf(null)èobject
typeOf(X)判断X的数据类型。
4、运算符:+-*/%&按位与|按位或^按位异或
特殊:+运算中碰上字符串就进行字符串拼接
js中除数可以为零,结果是Infinity
Infinity可以参加关系运算,
isFinite(num):专门判断一个数字是否在有效范围内,在的话返回true
5、关系运算:
返回值:true/false
<、>、=、<=、>=、==、!=、===、!==
特殊:默认都转为数字类型再比较大小,null和引用类型的对象,则不隐式转换,而是比较地址值。
参与比较的两个值都是字符串,不再转为数字类型,而是逐位比较每个字符的Unicode号。
null和undefined在==比较中会将undefined自动转换为null。
6、逻辑运算:
&&(且)||(或)!(非)
&&:左边的条件为false,则右边的不用判断,输出结果为false。
||:左边的条件为true,则右边的不用判断,输出结果为true。
!:对得到的boolean类型结果进行一次反转。
特殊:条件&&一件事:左边条件为true则执行右边的那件事,否则不执行
值1||值2:两个值任选其一,先选值1,值1为被转为true(有效),就返回值1,否则返回值2。
7、位移运算符:
左移:m<<n:èm*Math.pow(2,n);
右移:m>>n:èm/Math.pow(2,n);
取整:m>>>0 m^0 m|0 parseInt(m) Math.floor(x);
8、赋值运算:
=、++、--
n++与++n:n++是先进行其他操作,++作为收尾
++n是先进行++,作为开头。
注:表达式都是从左至右依次执行,提高优先级可用()
9、变量的声明:
注意:声明提前:在一个作用域中所有的声明都是作为这一作用域的最顶部,声明时默认给的值为undefined,所有的赋值操作留在原地
未用var声明的变量:都视为全局变量
变量声明:不能以数字开头,只能包含字母、数字和下划线
不能用保留字 name X
中文也可以当做变量名,不推荐
决定变量的类型的主要在于等号右边的数据。
特殊:
1. 只声明,但未赋值的变量,可任意使用。
2. 从未声明的变量,不能使用(或取值)!
此时若使用的话报错:ReferenceError XXX is not defined
3.未声明的变量却可以赋值,----其实和var不一样
尽量用var声明变量
特殊:常量的声明:const 常量名=值;
常量名:全部大写。
强行修改常量的值,不会报错,但也无法修改成功。
10、函数:
function在声明的时候也会有声明提前。
一段预定义好,被反复执行的语句,本质上是功能完整的对象。
方法里面调用一切未声明的变量都要去方法外面去找,方法会调用它找到的最近的那个同名变量。
方法里面不用var声明的变量在外面也能调用,因为不用var相当于声明了一个全局变量。
在函数的()中不加形参,在方法里面调用外面的变量会对这个变量产生影响,
函数相当于一个屋子,而形参就是门,没有形参那么函数里面的参数就会影响外面的同名参数。这个就叫实参泄露,如果给函数一个形参。再在函数里面声明一个同名变量,这个变量不会影响外面的同名变量值。在函数里面的同名变量如果不是用var声明的,这个变量也不是全局变量。
在函数内部定义同名的变量,方法内部调用的是内部的同名变量
函数的定义方法:1、function XX(){ 代码块 }
方法名和方法定义的声明提前
2、var XXX=function(形参){代码块}
仅方法名提前
注意:1.如果一个表达式或函数有结果,就可以直接当一个值进行使用
2.如果传入参数个数不符,不会报错:
a) 如果超了,多出的没用
b) 如果不够,未接到值的参数变量会变成undefined
11.全局函数
ES标准中规定的,浏览器厂商已经实现的,不需要任何对象,即可直接调用的函数。
JS中的JSFunctions函数
BOM中的都不是全局函数,alert不是全局函数不是ES标准。
12、死循环:
while(){}
for(;;){}
13、数组:引用类型的对象
垃圾回收:释放不再被任何变量引用的对象
垃圾回收器:在后台自动执行的,回收不再使用的对象的程序,对象每被一个变量引用,引用计数器都会+1,只要一个变量释放了对对象的引用,counter就会-1
何时回收:一个对象,不再被任何变量引用,(counter为零),垃圾回收器就会自动释放对象的空间。
无法实施回收,建议:使用完较大的对象,主动释放。
如何释放:变量名=null
数组名[i]的用法和普通的变量完全相同,特殊之处在于:如果i越界,js会自动在i位置创建一个新元素,保存值。
这种情况会造成下表不再连续,称为稀疏数组,数组中的元素不限制存入的数据类型。越界不会报错,在取值的时候回返回undefined,赋值的时候会在指定位置添加新元素,并自动修改length属性。
14.素引数组和关联数组的区别:
索引数组:自动分配元素的下标
关联数组:自定义下标的关联数组
数组插入元素方式:arr.length=value;
arr[key]=value;
关联数组的key不能重复,所有数组如果访问不存在的下标位置不会报错,只会返回undefined
关联数组优点:查找快
遍历方式:索引数组:for(var i=0;i<arr.length;i++){}
关联数组:for(var key in harr){}
15.拼接字符串:var str=String(arr); 返回数组中元素的内容,用逗号分割,将数组转为字符串。
除了null和undefined都有String(arr),返回数组中的元素的内容,用逗号分割
var str=arr.join(“连接符”);
自定义连接符
1. 无缝连接数组的每个元素 var =arr.join(“”);
2. 将单词拼接成句子,var str=arr.join(“ ”);
3. 将数组添加为html元素
注意:字符串的拼接不如数组的拼接效率,因为字符串创建了就不能够更改。
如果有大量的拼接尽量用数组,调用join方法一次性拼接成结果字符串。
16.拼接数组:
关键字:concat
用法:var newArr=arr1.concat(value1,arr2,value2…);
强调:concat不修改原数组,总是返回一个新数组。