GVKun编程网logo

js基础(js基础面试题)

23

本文的目的是介绍js基础的详细情况,特别关注js基础面试题的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解js基础的机会,同时也不会遗漏关于1js基础、1.Js基础、

本文的目的是介绍js基础的详细情况,特别关注js基础面试题的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解js基础的机会,同时也不会遗漏关于1 js基础、1.Js基础、JS加密之JS基础大考验、JS基础 - 对象的知识。

本文目录一览:

js基础(js基础面试题)

js基础(js基础面试题)

一.JavaScript基础
1.什么是JavaScript?
JavaScript是运行在浏览器端的脚本语言,它不需要编译,通过浏览器解释就可以执行. 它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言

2.js的作用
HTML与用户没有交互的功能,网页只能看,不能操作。. JavaScript用来制作web页面交互效果,提升用户体验

3.js的组成部分
(1)ECMAScript核心:  js基本语法,数据类型,语句,函数...
(2)DOM:定义了一组操作文档(HTML)的方法和接口.  操作HTML
(3)BOM:定义了一组和浏览器相关的方法和接口

4.js基本语法
(1)JavaScript 是一种弱类型语言,javascript的变量类型由它的值来决定。 定义变量需要用关键字 ''var''
(2)数据类型

二.js重点
1.js函数
语法:
function 函数名(参数列表){
  函数体
}

2.全局变量和局部变量
定义在函数体里的是局部变量,定义在函数体外的是全局变量,(它们的作用范围不一样)

3.获取元素方法
以使用内置对象document上的getElementById方法来获取页面上设置了id属性的元素,获取到的是一个html对象,然后将它赋值给一个变量:var oDiv = document.getElementById(''div1'');

4.点击事件
(1)方式1:通过标签的事件属性绑定
eg:<input  type="button" onclick="函数名(参数列表)" />
(2)方式2:派发事件(注意:页面加载成功之后才可以派发)
元素对象.onclick=function(){};  元素对象可以通过:document.getElementById("id值")来获得;

总结:js事件绑定的开发步骤
(1)确定事件
(2)创建一个函数响应这个事件
(3)得到要操作的标签对象(document.getElementById("id名")) ;  
(4)操作这个对象

5.定时任务
(1)setInterval(code,time)  按照指定的周期(以毫秒计)来调用函数或计算表达式

参数说明: code即执行的代码

(2)setTimeout(code,time):在指定的毫秒数后调用函数或计算表达式,延时执行,只调用一次

参数说明: code即执行的代码


三.BOM总结
1.BOM概述
Browser Object Model,为了便于对浏览器的操作,JavaScript封装了对浏览器中各个对象,使得开发者可以方便的操作浏览器中的各个对象
(1)window: 窗体对象
    1)alert():

显示带有一段消息和一个确认按钮的警告框

    2)confirm():显示带有一段消息以及确认按钮和取消按钮的对话框
    3)setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式
    4)setTimeout():在指定的毫秒数后调用函数或计算表达式
    5)clearInterval():取消由 setInterval() 设置的 timeout
    6)clearTimeout():取消由 setTimeout() 方法设置的 timeout
(2)navigator:浏览器对象
    1)

appName:
返回浏览器的名称
    2)appVersion:返回浏览器的平台和版本信息
(3)screen:屏幕对象
    1)width:返回显示器屏幕的宽度
    2)height:返回显示屏幕的高度
(4)history:历史对象
    1)back():加载 history 列表中的前一个 URL
    2)forword():加载 history 列表中的下一个 URL
    3)go():加载 history 列表中的某个具体页面
(5)location:当前路径信息
    1)host:设置或返回主机名和当前 URL 的端口号
    2)href:设置或返回完整的 URL
    3)port:设置或返回当前 URL 的端口号
    

 

 

 

 

 

1 js基础

1 js基础

# JS基础

## 一、JS语言介绍

#### 1、概念

- 浏览器脚本语言
- 可以编写运行在浏览器上的代码程序
- 属于解释性、弱语言类型编程语言

#### 2、组成

- ES语法:ECMAScript、主要版本ES5和ES6
- DOM:文档对象模型(Document Object Model),是W3C组织推荐的处理可扩展标志语言的标准编程接口。
- BOM:浏览器对象模型(Browser Object Model),提供了独立于内容的、可以与浏览器窗口进行互动的对象结构;且由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。

## 二、三种存在位置

#### 1、行间式:存在于行间事件中

```html
<body id="body" onload="body.style.backgroundColor=''#0ff''">

</body>
```

#### 2、内联式:存在于页面script标签中

```html
<body id="body">
<script type="text/javascript">
body.style.backgroundColor=''#0ff''
</script>
</body>
```

#### 3、外联式:存在于外部JS文件,通过script标签src属性链接

```html
index.js文件
body.style.backgroundColor=''#0ff''

index.html文件
<script src="./js/index.js"></script>
```

## 三、解释性语言特性决定JS代码位置

- 出现在head标签底部:依赖型JS库
- 出现在body标签底部:功能型JS脚本

## 四、JS语法规范

- 注释

```js
// 单行注释
/*
多行注释
*/
```

- 以分号作为语句结尾(允许省略)

## 五、变量的定义

#### 1、ES5定义变量

```js
var num = 10; // 无块级作用域变量
num = 10; // 全局变量
```

#### 2、ES6定义变量

```js
let num = 10; // 局部变量
const NUM = 10; // 常量
```

#### 3、变量(标识符)的命名规范

- 由字母,数字,_,$组成,不能以数字开头(可以包含中文字符)
- 区分大小写
- 不能出现关键字及保留字

| | | | | |
| --------- | --------- | ---------- | --------- | ------------ |
| abstract | arguments | boolean | break | byte |
| case | catch | char | class\* | const |
| continue | debugger | default | delete | do |
| double | else | enum\* | eval | export\* |
| extends\* | false | final | finally | float |
| for | function | goto | if | implements |
| import\* | in | instanceof | int | interface |
| let | long | native | new | null |
| package | private | protected | public | return |
| short | static | super\* | switch | synchronized |
| this | throw | throws | transient | true |
| try | typeof | var | void | volatile |
| while | with | yield | | |

## 六、三种弹出框

- alert:普通弹出框
- confirm:确认框
- prompt:输入框

## 七、四种调试方式

- alert()
- console.log()
- document.write()
- 浏览器断点调试

## 八、数据类型

#### 1、值类型

- number:数字类型

```js
var a = 10;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''number'')
```

- string:字符串类型

```js
var a = ''10'';
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''string'')
```

- boolean:布尔类型

```js
var a = true;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''boolean'')
```

- undefined:未定义类型

```js
var a = undefined;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''undefined'')
console.log(a == undefined)
```

#### 2、引用类型

- function:函数类型

```js
var a = function(){};
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''function'')
```

- object:对象类型

```js
var a = {};
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''object'')
console.log(a instanceof Object)
```

#### 3、具体的对象类型

- null:空对象

```js
var a = null;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''object'')
console.log(a == null)
```

- Array:数组对象

```js
var a = new Array(1, 2, 3, 4, 5);
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''object'')
console.log(a instanceof Object)
console.log(a instanceof Array)
```

- Date:时间对象

```js
var a = new Date();
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''object'')
console.log(a instanceof Object)
console.log(a instanceof Date)
```

- RegExp:正则对象

```js
var a = new RegExp();
console.log(a, typeof a)
// 判断方式
console.log(typeof a == ''object'')
console.log(a instanceof Object)
console.log(a instanceof RegExp)
```

#### 4、类型转换

- 数字|布尔 转换为 字符串

```js
var a = 10 or true

String(a)

a.toString()
```

- 布尔|字符串 转换为 数字

```js
var a = true or ''10''

Number(a)

+ a

parseFloat()
parseInt()
```

- 字符串|数字 转换为 布尔

```js
var a = 10 or ''10''
Boolean(a)
```

- 自动转换

```js
5 + null // 5
"5" + null // "5null"
"5" + 1 // "51"
"5" - 1 // 4
```

- 特殊产物

```js
// NaN: 非数字类型
// 不与任何数相等,包含自己
// 利用isNaN()进行判断
```

## 九、运算符

#### 1、算数运算符

前提:n = 5

<table>
<tr>
<th>运算符</th>
<th>描述</th>
<th>例子</th>
<th>x结果</th>
<th>n结果</th>
</tr>
<tr>
<td>+</td>
<td>加法</td>
<td>x=n+2</td>
<td>7</td>
<td>5</td>
</tr>
<tr>
<td>-</td>
<td>减法</td>
<td>x=n-2</td>
<td>3</td>
<td>5</td>
</tr>
<tr>
<td>*</td>
<td>乘法</td>
<td>x=n*2</td>
<td>10</td>
<td>5</td>
</tr>
<tr>
<td>/</td>
<td>除法</td>
<td>x=n/2</td>
<td>2.5</td>
<td>5</td>
</tr>
<tr>
<td>%</td>
<td>取模(余数)</td>
<td>x=n/2</td>
<td>1</td>
<td>5</td>
</tr>
<tr>
<td rowspan="2">++</td>
<td rowspan="2">自增</td>
<td>x=++n</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td>x=n++</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td rowspan="2">--</td>
<td rowspan="2">自减</td>
<td>x=--n</td>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>x=n--</td>
<td>5</td>
<td>4</td>
</tr>
</table>


#### 2、赋值运算符

前提:x=5,y=5

| 运算符 | 例子 | 等同于 | 运算结果 |
| :----- | :--- | ------ | -------- |
| = | x=y | | 5 |
| += | x+=y | x=x+y | 10 |
| -= | x-=y | x=x-y | 0 |
| *= | x*=y | x=x*y | 25 |
| /= | x/=y | x=x/y | 1 |
| %= | x%=y | x=x%y | 0 |

#### 3、比较运算符

前提:x=5

| 运算符 | 描述 | 比较 | 结果 |
| ------ | ---------- | ------- | ----- |
| == | 等于 | x=="5" | true |
| === | 绝对等于 | x==="5" | false |
| != | 不等于 | x!="5" | fales |
| !== | 不绝对等于 | x!=="5" | true |
| > | 大于 | x>5 | false |
| < | 小于 | x<5 | false |
| >= | 大于等于 | x>=5 | true |
| <= | 小于等于 | x<=5 | true |

#### 4、逻辑运算符

前提:n=5

| 运算符 | 描述 | 例子 | 结果 |
| ------ | ---- | ------------- | ------------------- |
| && | 与 | x=n>10&&++n | x=false,n=5(短路) |
| \|\| | 或 | x=n<10\|\|n-- | x=true,n=5(短路) |
| ! | 非 | x=!n | x=false,x=5 |

#### 5、三目运算符

```js
// 结果 = 条件表达式 ? 结果1 : 结果2;

// eg:
var tq = prompt("天气(晴|雨)")
var res = tq == ''晴'' ? "今天天气挺好" : "请假回家收衣服";
console.log(res);
```

#### 6、ES6语法解构赋值

- 数组的解构赋值

```js
let [a, b, c] = [1, 2, 3]
// a=1,b=2,c=3
let [a, ...b] = [1, 2, 3]
// a=1,b=[2,3]
```

- 对象的解构赋值

```js
let {key: a} = {key: 10}
// a=10
```

- 字符串解构赋值

```js
let [a,b,c] = ''xyz''
// a=''x'',b=''y'',c=''z''
```

 

1.Js基础

1.Js基础

  • js组成部分
1.ECMAScript 2.DOM(document object model)3.BOM(browser object document)
(1)ECMA是(欧洲计算机制造商协会)它规定了js的语法标准。
(2)DOM是文档对象模型,规定了文档的显示结构,可以轻松地删除、添加和替换节点
(3)BOM是浏览器对象模型,就是浏览器自带的一些功能样式,如搜索框,设置,等学习浏览器窗口交互的对象
  • 定义变量名的规范:
  1. 由字母、数字、下划线、$组成;
  2. 变量名不能以数字开头 1num
  3. 遵循驼峰命名法; 第一个有意义的单词小写,以后任何一个有意义的单词大写,(语义化:方便维护)
  4. 不能以关键字保留字作为变量名;

     关键字:在JS中有特殊意义的单词;
     保留字:在未来有可能成为关键字的词
    
  5. 严格区分大小写
  • 数据类型

    基本数据类型和引用数据类型
    1.基本数据类型存储到栈内存中,引用存储到堆内存中;
    2.基本数据类型是操作值的,引用数据类型操作的是空间地址;
    基本: number string boolean null undefined symbol
    引用: 对象数据类型和函数数据类型
    对象数据类型: 对象 数组 正则 Math Date的实例...
    函数数据类型: 函数 、类

    console.log(isNaN(NaN));//true
    console.log(isNaN("aaa"));//true
    console.log(isNaN("1px"));//true
    console.log(isNaN(1));//false
    console.log(isNaN("1"));//false
    console.log(Number("22.22")) //22.22
    console.log(Number(null));//0   *******
    console.log(Number([]));//0
    console.log(Number(""));//0
    console.log(Number(true));//1
    console.log(Number(false));//0
    console.log(Number("1px"));//NaN
    console.log(Number({})); //NaN
    console.log(Number(undefined));//NaN
isNaN() 先转number类型,是有效数字--false
  • 数据类型比较的规律

    1.对象==对象,比较的空间地址;
    2.对象==字符串,对象默认调用toString方法,先转换成字符串,再比较
    3.对象==布尔, 对象先转换字符串,再转换数字;布尔直接转换数字;
    4.对象==数字; 对象先调用toString方法转成成字符串,然后再转number
    5.布尔==数字: 布尔转数字
    6.字符串==数字:字符串转数字
    7.布尔==字符串:布尔转数字,字符串转数字,然后比较
    8.null == undefined: true //null==null undefined==undefined 都是true
    9.unll.undefined 和其他数据类型比较都是false;

JS加密之JS基础大考验

JS加密之JS基础大考验

之前不知道在哪看到的几个JS题目,感觉比较有趣,全是细节,没什么技巧。

之前的那个博主也写了他对题目的理解,我个人感觉还是一知半解,于是想按自己的理解再写一次。

感兴趣的朋友可以一起看一下,懂JS基础就可以看明白。

只抽了2个典型的例子,其他题目大同小异没啥特点

题目1

var x = 1;
function f(x, y = function () { x = 3; console.log(x); }) {
  console.log(x) // 1
  var x = 2 
  y() // 2
  console.log(x) // 3
}
f()
console.log(x) // 4

各位先复制代码自己去分析推理一遍,预想一下答案是什么,然后执行一遍看看是否符合自己的猜想。

然后继续分析为何会是这个结果。如果还是不解,再来看我的想法,应该会比较更深入的了解。

各位先努力分析一波,待会我揭晓我的看法····

执行顺序

1.x是参数,未赋值,所以是undefine。

var x = 2,重新申明x变量,将参数的x覆盖了。

2.执行y函数,打印y函数里的x

3.打印x,y函数修改的x = 3,修改的是y函数最近作用域的x,也就是参数x,而这里打印的是 var x = 2;申明的x,所以是2

4.最后打印x,也就是最外层的x,因为f函数内修改的都是局部作用域的x,所以外层x异常是初始值

题目2

var x = 1;
function f(xx, y = function () { x = 3; console.log(x); }) {
  console.log(x) // 1
  var x = 2
  y() // 2
  console.log(x) // 3
}
f()
console.log(x) // 4

这题依然大家先不要执行,自行在脑子里分析执行结果。

这题考的其实就是var提升,就是一些小细节问题。

执行顺序

1.第一个x是undefined,原因是f函数内有一个x的变量申明了,他会在作用域内提升到最前边申明。

f函数内部真正执行的时候成了这样

var x = 1;
function f(xx, y = function () { x = 3; console.log(x); }) {
  var x;
  console.log(x) // 1
  x = 2
  y() // 2
  console.log(x) // 3
}
f()
console.log(x) // 4

2.y函数内打印3

3.因为就近作用域原则,y函数内的x当前作用域没有,向外层找,找到的是最外层的x,修改的也是最外层的,所以这里输出的还是2

4.因为y函数给他改成3了 所以输出3

结语

JS加密技术必须要有扎实的js基础功,才能更好的利用这些知识去保护别人的JS,防止代码被不良份子侵害。

如果你感觉文章很有用,请点赞收藏。

如果感觉文章有不对的地方非常欢迎指出一起探讨纠正。

如果有需要联系我,可以在jsjiami.com底部有我联系方式

JS基础 - 对象

JS基础 - 对象

对象

字符串对象

创建字符串对象方式

<script>
	var str="test"
	console.log(typeof str)
</script>
string

<script>
	var str=new String("test")
	console.log(typeof str)
</script>
object

数组对象

创建字符串对象方式

<script>
	var array=[1,2,3]
	console.log(typeof array)
</script>
object

<script>
	var array=new Array(1,2,3);
	console.log(typeof array)
</script>
object

创建二维数组(数组嵌套)

<script>
	var test=new Array(3);				//创建的三个空数组
	for (var i=0;i<=2;i++){				//for循环方式添加子数组
		test[i]=new Array(2);			//每个数组元素中添加的子元素有两个数组
	}
	test[0][0]="星期一";					//添加主数组第一个元素的第一个子数组元素
	test[0][1]="Monday";				//添加主数组第一个元素的第二个子数组元素
	test[1][0]="星期二";					//添加主数组第二个元素的第一个子数组元素
	test[1][1]="Tuesday";				//添加主数组第二个元素的第二个子数组元素
	test[2][0]="星期三";					//添加主数组第三个元素的第一个子数组元素
	test[2][1]="Wednesday";				//添加主数组第三个元素的第二个子数组元素
	console.log(test);					//console.log方式打印数组
	document.write(test);				//document.write方式打印数组
</script>

document.write显示

星期一,Monday,星期二,Tuesday,星期三,Wednesday

console.log显示

(3) [Array(2), Array(2), Array(2)]     //三个主元素,每个元素里包含两个子元素
0:(2) ["星期一", "Monday"]
1:(2) ["星期二", "Tuesday"]
2:(2) ["星期三", "Wednesday"]
length:3
__proto__:Array(0)

函数对象

arguments()

<script>
	function test(){
		console.log("接收到的数值:",arguments);
		console.log("接收到的长度:",arguments.length);
	}
test(1,2,3,4,5);
</script>
接收到的数值: Arguments(5) [1, 2, 3, 4, 5, callee: ƒ, Symbol(Symbol.iterator): ƒ]
js_lesson.html:156 接收到的长度: 5

匿名函数

<script>
(function(arg){alert(arg)})("这是个测试函数")
//(function(参数){函数体})(执行调用参数)
</script>

windows对象

window对象用的时候操作系统识别可以省略前缀,如:

window.alert()可以直接写成alert()

window.alert()

显示带有一段消息和确认按钮的警示框

<script>
	window.alert("警告!");
</script>

window.configrm()

显示带有一段消息以及确认和取消按钮的对话框

<script>
	if (window.confirm("继续还是退出?"))
		{
		alert("继续后的代码!");
		}
	else
		{
		alert("你已经取消!");
		}
</script>

window.prompt()

显示可以提示用户输入的对话框

<script>
	var user = window.prompt("用户名:");
	var passwd = window.prompt("密码:");
	document.write("您输入的用户名:",user,"密码:",passwd);
</script>

用户名输入:abc密码输入:123后

您输入的用户名:abc密码:123

window.open()

打开一个新的浏览器窗口或查找一个已命名的窗口

<script>
	window.open("https://www.centos.org");
</script>

windos.close()

关闭浏览器窗口

window.setTimeout()

按照指定的时间(以毫秒计)调用函数或计算表达式,只调用一次

<script>
	function time()
	// 定义时间函数
	{
		document.write(new Date());   
		// 显示时间
	}
	window.setTimeout("time()",3000);
	// 指定的时间调用函数
</script>

window.setInterval()

按照指定的周期(以毫秒计)循环调用函数或计算表达式

每3000毫秒弹出框显示"Hell world"

<script>
	setInterval(''alert("Hello world");'', 3000);
</script>

在文本框显示当前时间

<input id="time" size="50" />
<!-- 定义文本输入框 -->

<script>
	// 定义时间函数
	function time()
	  {
	  	var time=new Date();
	  	// 定义当前时间
	  	document.getElementById("time").value=time;
	  	// 获取指定ID对象的引用,定义文本输入框的值为当前时间
	  }

	window.setInterval("time()",50);
	// 50毫秒执行一次时间函数time()
</script>

window.clearInterval()

取消由setInterval()设置的事件

<input id="time" size="50" />
<!-- 定义文本输入框 -->
<button onclick="window.clearInterval(Control)">点击停止</button>
<!-- 取消由setInterval()设置的事件,终止时间函数-->

<script>
	// 定义时间函数
	function time()
	  {
	  	var time=new Date();
	  	// 定义当前时间
	  	document.getElementById("time").value=time;
	  	// 获取指定ID对象的引用,定义文本输入框的值为当前时间
	  }

	var Control = window.setInterval("time()",50);
	// 定义执行时间函数time(),便于控制
</script>

history对象

window对象的子对象

包含用户在浏览器窗口中访问的对象

history方法 释义
back() 加载history列表中的前一个URL
forward() 加载history列表中的下一个URL
go() 加载history列表中的某个具体页面

前进

<a href="test2.html">测试超链接</a>
<button onclick="goForward()">前进</button>

<script>
function goForward()
  {
  window.history.forward();
  }
</script>

后退

<button onclick="back()">返回</button>

<script>
function back()
  {
  	window.history.back();
  }
</script>

go()前进

<a href="test2.html">测试超链接</a>
<button onclick="goForward()">前进</button>

<script>
function goForward()
  {
  window.history.go(1);
  }
</script>

go()后退

<button onclick="back()">返回</button>

<script>
function back()
  {
  	window.history.go(-1);
  }
</script>

Location对象

Location对象包含有关当前URL的信息

Location对象是window对象的子对象,可通过window.location来访问

Location方法 释义
location.assign(URL) 加载新页面
location.reload() 刷新页面
location.replace(newURL) 用新页面替代加载页面

综合示例

<button onclick="e()">Centos官网-点击跳转新页面</button>
<button onclick="f()">刷新页面</button>
<button onclick="g()">Centos官网-点击覆盖当前页面</button>

<script>
	function e()
		{
		window.location.assign("http://www.centos.org");	//可以用浏览器或后台按钮
		}
	function f()
		{
		window.location.reload();
		}
	function g()
		{
		window.location.replace("http://www.centos.org");	//直接覆盖当前页面,不能后退
		}
</script>

关于js基础js基础面试题的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于1 js基础、1.Js基础、JS加密之JS基础大考验、JS基础 - 对象的相关信息,请在本站寻找。

本文标签: