js基础杂记
Posted sunvenet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js基础杂记相关的知识,希望对你有一定的参考价值。
- document.write(); //表示在当前页面上输出内容
- 如果<script>标签引入了外部文件,那么在这个script标签内就不能在执行其他script代码了。例如<script type="text/javascript" src="xxx.js"></script>的中间再写执行不到哦
- 如果要输出文本类型的</script>可以用<代替左尖括号(<),用>代替右尖括号(>)
- 用户定义的所有名字叫做标识符(或者变量名),标识符必须由数字、字母、下划线或者$符号组成(注意:不能以数字开头!)
- 标识符区分大小写,例如:age和AGE是两个不同的变量
- js是弱类型语言,变量起初被赋值成什么类型就是什么类型,不建议中途改变这个变量的类型
- 任何类型的数据和字符串类型数据做相加操作的时候,其他数据类型会自动转换成字符串类型进行字符串的拼接,此时相加操作不再是数学意义上的加法,而是表示拼接的意思
- 任何数据除了和字符串做相加运算外,与NaN做任何运算(减,乘,除)的结果始终为NaN。(NaN本身与NaN相加也为NaN),字符串如果是纯数字则转换成数字,否则转换成NaN,例如1-"-2"那么就为3,例如1-“-2a”就为NaN(NaN的意思是Not A Number非数字)
- 关系运算符,在等和不等的比较上,①如果一个操作数为布尔值,则将其转换为数值,false转换成0,true转换成1。②一个操作数为字符串,则比较之前将其转成数值再进行比较,例如alert(20 == "20");将返回true。③一个操作数为NaN,则==返回false,!=返回true,并且NaN和NaN也不相等哦。(NaN==NaN返回false)。
- 逻辑运算符 ①与:表达式1 && 表达式2 (短路操作:当表达式1为false,那么直接输出false,表达式2将不再判断执行)②或:表达式1 || 表达式2(短路操作:当表达式1为true时,表达式2将不会再判断执行)③非:! 也就是将操作数转换程布尔值后再取反的操作,如果操作数是一个空字符串,返回true(即 alert(!"") ),如果操作数是非空字符串,则返回false,如果操作数是0,则返回true(即 alert(!0)),如果操作数是任何非0的数字(包括Infinity),那么都返回false,如果操作数是NaN,那么非运算返回true,如果操作数是undefined,那么非运算符返回true。
- 进制转换:①十进制转换成二进制:除2取余,倒序排列。②二进制转8进制:从右向左,每三位一组,不足三位使用0补齐,再将每组数转换成10进制。③二进制转十六进制:从右向左,每四位一组,不足四位使用0补齐,再将每组数转换成10进制。
- 在书写分支语句的时候,一般把出现概率较大的情况要写在前面(为了降低资源消耗,让大概率的情况先执行到)。
- arguments:在每一个函数内,都有一个内置的数组,是一个变量,叫做arguments,arguments可以存储当前函数传入的所有参数,而且,是通过传参的顺序进行排列的。要访问arguments里面的数据,需要通过对应的下标进行访问(例如arguments[0])。
- arguments.length 输入传入参数的个数。
- 作用域就是起作用的范围,或者说是有效范围,每一个函数的声明都会形成一个作用域。全局作用域声明的变量叫全局变量,局部作用域声明的变量叫局部变量,局部变量的生命周期和生效范围,仅限于声明该变量的函数区域。当函数调用完以后就直接销毁。如果全局作用域和局部作用域变量重名,我们就采取就近原则,当前访问这个变量离哪个作用域近,就是哪个作用域范围。
- 函数的递归调用。方法:①首先找临界值,既无需计算就可以获得的值。②找出这一次和上一次的关系。③假设当前函数已经可以使用了,调用自身计算上一次的运行结果,再写出这次的运行结果。特点:①必须有参数。②必须有return。
例如:计算1~100的和,分析入下:1为无需计算就可以获得的值。第100次和第99次的关系是,99次的和再加上100。代码如下:
function sum(n){ if(n == 1){ return 1; } return sum(n-1) + n; } alert (sum(100));
- 我们可以通过document.getElementById找到符合条件的标签节点,然后可以用时间驱动函数,给当前的按钮绑定一些列操作,完成交互。
- arr.length代表数组的长度(数组元素个数),其中length属性不止是只读,还能进行设置,比如:
var arr = ["red","blue","black"];
alert(arr.length); //输出3
arr.length = 2;
alert(arr.length); //输出2 - 数组元素的访问和赋值,是通过下标完成的,下标就是索引,从0开始,下标最大的取值是长度-1(length -1),下标可以是变量或者表达式,例如:
var arr = [10, 20, 30, 40, 50];
alert(arr[1+2]); //输出40,相当于取arr[3]的值。 - 使用for in 进行数组遍历,例如:
var arr = ["red","blue","black"];
for(var i in arr){
document.write(arr + ","); //输出red,blue,black
} - 数组中的方法:①【格式】 数组.push() 【功能】给数组末尾添加元素 【参数】一个或多个 【返回值】添加元素后,数组的长度。例如:
var arr = ["钢铁侠", "雷神", "绿巨人"];
arr.push("蜘蛛侠","快银");
alert(arr); //输出钢铁侠,雷神,绿巨人,蜘蛛侠,快银
=============================================
var arr = ["钢铁侠", "雷神", "绿巨人"];
var res = arr.push("蜘蛛侠","快银");
alert(arr); //输出钢铁侠,雷神,绿巨人,蜘蛛侠,快银
alert(res); //返回 5 ,即添加元素后,数组的长度。
=============================================
②【格式】数组.pop()【功能】移除数组末尾的最后一个元素【返回值】移除的元素。【参数】无。例如:
var arr = ["钢铁侠", "雷神", "绿巨人"];
var res = arr.pop();
alert(arr); //输出钢铁侠,雷神
alert(res); //输出绿巨人
=============================================
③
shift() 【格式】数组.shift();功能,从数组的头部取下一个元素,返回值为取下的元素。var arr = ["美队", "钢铁侠", "寡姐"];
var res = arr.shift();
alert (arr); //输出钢铁侠,寡姐
alert (res); //输出美队
=============================================
unshift();【格式】数组.unshift();给数组头部添加元素【参数】一个或多个 【返回值】添加元素后,数组的长度。var arr = ["美队", "钢铁侠", "钢铁侠"];
var res = arr.unshift("蜘蛛侠");
alert(arr); //输出蜘蛛侠,美队,钢铁侠,寡姐
alert(res); //输出4
=============================================
④concat() 【功能】将两个数组合并成一个数组,源数组不会被改变【格式】数组1.concat(数组2)【返回值】合并好的新数组【参数】要合并的数组,例如:var arr1 = ["美队", "绿巨人", "寡姐"];
var arr2 = ["蜘蛛侠", "钢铁侠"];
var arr3 = arr1.concat(arr2);
alert(arr3); //输出美队,绿巨人,寡姐,蜘蛛侠,钢铁侠
alert(arr1); //输出美队,绿巨人,寡姐
alert(arr2); //输出蜘蛛侠,钢铁侠
=============================================
⑤slice();
【格式】数组.slice(start, end);
【功能】:基于当前数组获取指定区域元素并创建一个新数组。原数组不改变。
【参数】:start开始获取区域的下标,end获取结束区域的下标,注意,获取的范围不包括end下标位置的元素。
【返回值】:指定区域元素生成的新数组。例如:var arr = ["钢铁侠", "美国队长", "绿巨人", "寡姐"];
var arr2 = arr.slice(1,3);
alert(arr2); //输出美国队长,绿巨人
alert(arr); //输出钢铁侠,美国队长,绿巨人,寡姐
=====================================================
⑥splice();
可以完成对数组元素的删除、插入、替换操作。
【格式】:数组.splice(start, length, 元素...)
【参数说明】:(参数1 截取的开始下标) (参数2 截取(删)的长度)(参数3 在截取的开始下标位置,我们要插入的元素,插入元素的个数随意。)
【注意】:splice()会对源数组进行修改。
【返回值】:截取掉的元素,组成的数组。例如://删除数组中的元素
var arr1 = ["美国队长", "钢铁侠", "寡姐", "绿巨人"];
var arr2 = arr1.splice(1,1);
alert(arr1); //输出美国队长,寡姐,绿巨人(钢铁侠删除了)
alert(arr2); //输出钢铁侠
==================================================//替换数组元素(也就是先删除,再插入)
var arr1 = ["美国队长", "钢铁侠", "寡姐", "绿巨人"];
var arr2 = arr1.splice(1,2,"蜘蛛侠","鹰眼");
alert(arr1); //输出美国队长,蜘蛛侠,鹰眼,绿巨人(钢铁侠和寡姐被替换成两个新英雄)
alert(arr2); //输出钢铁侠,寡姐
==================================================//插入数组元素
var arr1 = ["美国队长", "钢铁侠", "寡姐", "绿巨人"];
var arr2 = arr1.splice(1,0,"蜘蛛侠","鹰眼");
alert(arr1); //输出美国队长,蜘蛛侠,鹰眼,钢铁侠,寡姐,绿巨人(下标为1的开始位置成功插入了两个英雄)
alert(arr2); //输出null===============================================
⑦join();
【格式】:数组.join(拼接符);
【功能】:使用拼接符将数组中元素拼接成字符串;
【参数】:拼接符
【返回值】:拼接好的字符串
【注】:原数组不改变var arr = [10, 20, 30];
var res = arr.join("&");
alert(res); //输出10&20&30
alert(arr); //输出10,20,30
====================================================== - 数组的排序:
sort();
【格式】:数组.sort();
【功能】:将数组中的元素升序排序。
【注意】:sort()模式是按照字符串进行排序var arr = [5, 4, 2, 3, 1];
var pai = arr.sort();
alert(pai); //输出 1,2,3,4,5
=================================
var arr = [10, 1, 5, 15];var pai = arr.sort();
①冒泡排序
alert(pai); //输出1,10,15,5,原因是因为sort()模式是按照字符串排序
【一般情况下,我们需要自己编写排序的算法,系统提供的排序函数,用的比较少】
==========================================================================
var arr = [9, 8, 7, 6, 5, 4];
for(var i = 0; i < arr.length; i++){
for(var j = 0 ; j < arr.length - i -1; j++){
if(arr[j] > arr[j + 1]){
var middle = arr[j+1];
arr[j+1] = arr[j];
arr[j] = middle;
}
}
}
alert(arr); //输出4,5,6,7,8,9
=================================================
②选择排序:
通过比较先选出最小的数放在第一的位置上,然后在其余的数中选择次小数放在第二的位置上,以此类推,直到所有的数形成有序数列。var arr = [9, 8, 7, 6, 5, 4];
for(var i = 0; i < arr.length - 1; i++){
for(var j = i + 1; j < arr.length; j++){
if(arr[i] > arr[j]){
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
alert(arr); //输出4,5,6,7,8,9
==================================================== -
关于数组 复合数据类型(也叫引用数据类型)在计算机中存储的一些说明:
先来看一个单变量的例子:
var i = 10;
function show(i){
i = 5;
alert(i);
}
alert(i); //输出10;
show(i); //输出5;
alert(i); //输出10;
在这个例子中,由于变量的作用域关系,所以尽管第二个函数执行后,起作用的范围仅限该函数内部,执行完立即被释放掉,所以第三次输出仍然为10.
而在下面的例子中:
var arr = [10,20];
function show(arr){
arr.push(30,40);
alert(arr);
}
alert(arr); //输出10,20
show(arr); //输出10,20,30,40
alert(arr);//输出10,20,30,40
根据输出结果,我们可以知道:
所有的复合类型(数组、对象object)都不直接存储在我们的函数中,是存储在内存的一个堆区域,在堆区域,可以任意分配内存空间,所有的符合类型数据,存储的都是门牌号(地址),这个类型的数据也叫做引用数据类型。
========================================================== - 字符串:通常用常量来创建字符串,例如:var str = "hello";
①获得字符串的个数,【格式】字符串.length。例如:
var str = "hello"; alert(str.length); //输出5
==========================================
②访问字符串中的某个字符:charAt();
var str = "hello";
alert(str.charAt(1)); //输出e
也可以通过另外一种简写方式alert(str[1]);访问输出e
==========================================
注意:Ecmascript中字符串是不可变的,也就是说,字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。例如:
var str = "hello";
str[1] = "x";
alert(str); //输出仍然为hello,如果要改变,那只能整体重新赋值,var str = "hxllo";
================================================+号可以作为字符串拼接符存在
var str = "hello";
alert(str + "world");//输出helloworld - 关于字符串的函数:
charCodeAt();
【格式】:字符串.charCodeAt(下标);
【返回值】:返回字符串中对应下标字符的ASCII码值var str = "hello";
alert(str.charCodeAt(1)); //输出101;
=============================================String.fromCharCode(ASCII码值);
【参数】:ASCII值,个数任意
【返回值】:ASCII码对应字符组成的字符串
var str = String.fromCharCode(97,98,99);
alert(str); //输出abc
================================================concat();
可以用于对字符串进行拼接操作,注意,对原有字符串没有影响。
var str1 = "hello";
var str2 = "world";
alert(str1.concat(str2)); //输出heloworld
alert(str1); //输出hello
alert(str2); //输出world
一般情况下很少用concat拼接,直接用字符串拼接符+
==================================================indexOf();
【格式】:字符串.indexOf(子串,开始查找的位置);
【返回值】:如果在字符串中找到了子串第一次出现的位置,返回子串出现的位置,否则没有查找到返回 -1;var str = "abcabcabc";
alert(str.indexOf("abc")); //输出0
alert(str.indexOf("abc",1)); //从第一位开始查找,直至第三位找到,所以输出3
alert(str.indexOf("abcd")); //输出-1,没找到
===================================================lastindexOf();
【格式】:字符串.lastIndexOf(子串);
【返回值】:如果在字符串中找到了子串最后一次出现的位置,返回子串出现的位置,否则没有查找到返回 -1;var str = "abcabcabc";
alert(str.lastIndexOf("abc")); //输出6
===================================================search(子串/正则); 参数可以是正则表达式
正则表达式用//开始和结束,还可以添加修饰符,比如 i 表示忽略大小写, g 表示全局匹配。var str = "Abcabcabc";
alert(str.search("abc")); //js大小写敏感,输出3(从第4位才开始匹配到)
alert(str.search(/abc/i)); //输出0(第1位就找到了,因为使用了正则修饰符i,使其忽略大小写);注意此处,如果启用正则,那么双引号就不需要了。
======================================================replace();
【格式】:字符串.replace(匹配的字符串/正则表达式,替换成的新字符串);
【返回值】:替换完成以后新生成的字符串。
var str = "how are you";
alert(str.replace("are","old are")); //输出how old are you
alert(str); //依然还是输出how are you 注意之前讲过的字符串不能被修改,只能被重新创建。
再来看一个例子:var str = "how Are are you";
alert(str.replace("are","old are")); //只能匹配小写的are
alert(str.replace(/are/ig,"old are")); //正则匹配了全局和忽略了大小写,输出how old are old are you
============================================================substring();
【格式】:字符串.substring(start,end);
【作用】:字符串提取,在指定范围内,提取字符串,生成新字符串。
【返回值】:生成新的字符串。
【注意】:不包含结束位置var str = "helloworld";
alert(str.substring(2,4)); //输出ll
============================================================split();字符串分割
【格式】:字符串.split(分隔符,生成的结果的个数);
【返回值】:通过分隔符,分割成的装有子串的数组。
var str = "This is a box";
var arr = str.split(" ");
alert(arr);//按照空格,分割成了单个单词
===================================
var str = "This is a box";
var arr = str.split(" ",2);
alert(arr);//只输出this和is注意:分隔符是作为一个整体进行计算的,例如:
var str = "This is a box";//this两个空格is一个空格a一个空格box
var arr = str.split(" ");//两个空格
alert(arr);//按照两个空格,分割成了This和is a box;
==========================================
再例如:
var str = "This is a box";//this两个空格is一个空格a一个空格boxvar arr = str.split(" ");//一个空格
alert(arr);//输出this,,is,a,box(分出一个空字符串)
====================================
再例如var str = "This is a box";//this两个空格is一个空格a一个空格box
var arr = str.split("");//空字符串(没有空格)
alert(arr);//逐个进行分割输出,t,h,i,s,,,i,s,,a,,b,o,x
==================================== - 从字符串到数组,可以使用split(); 从数组到字符串可以使用join();
var str = "This is a box";
====================================================
var arr = str.split(" ");
alert(arr);
alert(arr.join("&")); -
var str = "This is A box";
alert(str.toLowerCase()); //输出小写
alert(str.toUpperCase()); //输出大写
====================================================
以上是关于js基础杂记的主要内容,如果未能解决你的问题,请参考以下文章
(基础杂记) —— 2021-07-13 —— 牛客刷题错题记录