js数据类型转换,js作用域,js创建对象的三种方式

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: js数据类型转换,js作用域,js创建对象的三种方式

加粗样式## Day_03

<script>
  alert('警示框');
  prompt('弹出输入框');
  console.log('控制台输出');
</script>

数据类型:简单数据类型和复杂数据类型js的变量数据类型是只有程序在运行过程中,根据等号右边的值确定的.JavaScript拥有动态类型,意味着相同的变量可用作不同的类型.

简单的数据类型:Number,String,Boolean,Udefined,Null

注意:字符串转义字符都是用\开头的但是这些转义字符写到引号里面


eg:var str=‘我是"好人"的\n男朋友’;


boolean布尔类型在和数字类型相加运算时,true为1 ,false为0


eg:console.log(1+true);===>2


console.log(1+false);===>1


NaN不是数字:var a;


console.log(a+1);


结果为NaN


结论:undefined与数字相加结果为NaN


null值和数字相加为数字


null和undefined相加为NaN


boolean类型和undefined相加为NaN


复杂数据类型:Object

null属于Object类型


获取变量的数据类型:typeof

eg: var a=1; console.log(type a);====>number


数据类型转换:

转换为Boolean类型Boolean(),代表为空,否定的值都会被转换为false,如’’,0,NaN,null,undifined,其他的都为true


数字转换为字符串:数字.toString();String(数字);数字+’'称之为隐式转换


字符转换为number类型:parseInt(字符串);如果字符串我小数则取整


parseFloat(字符串);


转换为数字时如果字符串以数字开头字符结尾也会转为数字


eg: var a=“2121浮海石”;parseInt(a);也会为2121


var a=“浮海石2121”;parseInt(a);会为NaN


隐式计算符号: - * / == 字符串做这三种计算式会隐式的转换为Number类型进行运算

算数运算

浮点数的计算因为精度确实的问题故此不能直接用两个浮点数运行进行比较


==号只比较数据值


===号既比较值也比较数据类型


do{}while()语句至少要执行一次


eg:

var i=0;
do{
  console.log('你好');
  i++;
}while(i<=100)

js的数组

创建数组的方式:var arr=new Array(); var arr1=[];可以放多种类型的数据


冒泡排序是一种算法,把一系列的数据按照一定的顺序进行排列显示(大到小,小到大).

arguments的使用

当我们不确定有多少个参数传递的时候,可以用arguments来获取,在JavaScript中,arguments实际上他是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中储存了传递的所有实参.

function fn(){
    console.log(arguments);//里面存储了所有传递过来的实参
}
fn(1,2,3);
打印控制台上Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
这是一个伪数组
      可以进行遍历
      具有length属性
      按照索引的方式进行存储的
      不具有数组的push和pop等方法
只有函数才有arguments对象,而且每个函数都内置好了这个arguments

函数可以调用另外一个函数

匿名函数

var fun=function(aru){
   console.log('我是函数表达式'); 
}
fun('皮特');//fun是变量名不是函数名,

js中的作用域

js中的两种作用域:全局(script标签中的)和局部(函数内部的也叫函数作用域)

能够区分全局变量和局部变量:在全局作用域下的变量或者在函数内部没有生命直接被赋值的变量也为全局变量,在函数内部的变量或者函数的形参都是局部变量.

如何在作用域链中查找变量的值

内部函数访问外部函数的变量,采用的是链式查找的方式来决定取哪个值,这种结构我们称之为作用链.

 <script>
  var num=10;
  function fn(){//外部函数
  var num=20;
  fun();
  function fun(){//内部函数
    console.log(num);
  }
  }
  fn();
 </script>
 结果为:20

预解析

1:我们js引擎执行js分为两步:预解析和代码执行


1.1:预解析js引擎会把js里面所有的var还有funcation提升到当前作用与的最前面


1.2:代码执行,按照代码书写的顺序从上往下执行


2:预解析分为变量预解析(变量提升)和函数预解析(函数提升)

2.1:变量提升就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作


2.2:函数提升就是把所有的函数声明提升到当前作用于的最前面,不调用函数.


eg:

问1:
  <script>
  console.log(num);
  </script>
  报错:num is not defined
问2:
  <script>
  console.log(num);
  var num=10;
  </script>
  结果:undefined
  //执行的流程
  var num;
  console.log(num);
  num=10;
问3:
  <script>
  fn();
  function fn(){
      console.log(11);  
  }
  </script>
  结果是:11
  //执行的流程
  function fn(){
      console.log(11);  
  }
  fn();
问4:
  <script>
  fun();
  var fun=function fn(){
        console.log(22);  
  }
  </script>
  结果:报错,fun is not function
  //执行流程
  var fun;
  fun();
  fun=function fn(){
        console.log(22);  
  }
问4:
  <script>
  f1();
  console.log(c);
  console.log(b);
  console.log(a);
    function f1(){
      var a=b=c=9;
    console.log(a);
    console.log(b);
    console.log(c);
    }
  </script>
  结果:9,9,9,9,9,c is not defined
  //执行流程
   function f1(){
      var a=b=c=9;//相当于 var a=9;b=9;c=9;函数内部没有被var声明的变量为全局
    console.log(a);
    console.log(b);
    console.log(c);
    }
    f1();
  console.log(c);
  console.log(b);
  console.log(a);

js对象

对象是由方法和属性组成的,


属性:事物的特征,在对象中用属性来表示.(名词)


方法:事物的行为,在对象中用方法来表示(动词)


创建对象的三种方式

1:字面量创建

var obj={};//创建了一个空的对象


var obj={


uname:‘张三丰’,


age:18,


sex:‘男’,


sayHi:function(){


console.log(‘hi~’);


}


}


1.1:


(1):属性或者方法我们采用的是键值对的形式 键 属性名:值 属性值


(2):多个属性或者方法中间采用的是逗号隔开


(3):方法冒号后面跟的是一个匿名函数


1.2:使用对象


(1):调用对象的属性我们采取的是对象名.属性名 eg:obj.uname


(2):调用属性还有另外一种方法 对象名[‘属性名’] eg:obj[‘uname’]


(3):调用对象的方法 对象名.方法名 eg:obj.sayHi();


小结:变量,属性,函数,方法的区别


变量和属性的相同点:都是用来保存数据的


不同点:变量单独声明并复制,使用的时候直接写变量名 单独村子啊


属性在对象里面不需要声明,使用时候必须是 对象.属性


函数和方法的相同点:都是实现某种功能的


不同点:函数是单独声明,并且调用 函数名(),单独存在的


方法在对象里面的,调用的时候 对象.方法名();


2:new Object创建

var obj=new Object();//创建了一个空的对象


obj.uname=‘张三丰’;


obj.age=18;


obj.sex=‘男’;


obj.sayHi=function(){


console.log(‘hi~~~’);


}


3:构造函数创建

我们为什么需要用构造函数来创建对象呢?因为前面两种方式只能一次创建一个对象


构造函数:是一个特殊的函数,主要用初始化对象,既为对象成员变量赋初始值,他总与new运算符一起使用,我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面.

//构造函数名字首字母要大写
//构造函数不需要return就可以返回结果
//我们调用构造函数必须使用new
//构造函数的属性和方法前必须要使用this关键字
function Start(uname,age,sex){//构造函数
    this.name=uname;
    this.age=age;
    this.sex=sex;
    this.sing=function(sang){
    }
}
var ldh=new Start('刘德华',12,'男');//对象
ldh.sing('冰雨');
//构造函数和对象的关系:
        对象:是一个具体的事物
        构造函数:泛指的某一大类 
//我们利用构造函数创建对象的过程我们也称之为对象的实例化
//new关键字
  1:new 构造函数可以在内存中创建一个空的对象
  2:this就会指向刚才创建的空对象
  3:执行构造函数的代码,给这个空对象添加属性和方法
  4:返回这个对象

遍历对象

for in遍历我们的对象

for(var 变量 in 对象){}

 var obj={
  name:'张三分',
  age:13,
  sex:'男',
  say:function(){
  console.log('sayHi~~~~');
  return 'dsad';
  }
  }
  for(var k in obj){
  console.log(k);
  console.log(obj[k]);//只能这种方式获取属性值不能 对象.
  console.log(obj.k);//undefined
  }
目录
相关文章
|
1月前
|
JavaScript 前端开发
js的作用域作用域链
【10月更文挑战第29天】理解JavaScript的作用域和作用域链对于正确理解变量的访问和生命周期、避免变量命名冲突以及编写高质量的JavaScript代码都具有重要意义。在实际开发中,需要合理地利用作用域和作用域链来组织代码结构,提高代码的可读性和可维护性。
|
3月前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
145 59
|
11天前
|
存储 JavaScript 前端开发
JavaScript中的数据类型以及存储上的差别
通过本文的介绍,希望您能够深入理解JavaScript中的数据类型及其存储差别,并在实际编程中灵活运用这些知识,以提高代码的性能和稳定性。
40 3
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]作用域的“生产者”——词法作用域
本文介绍了JavaScript中的作用域模型与作用域,包括词法作用域和动态作用域的区别,以及全局作用域、函数作用域和块级作用域的特点。通过具体示例详细解析了变量提升、块级作用域中的暂时性死区等问题,并探讨了如何在循环中使用`var`和`let`的不同效果。最后,介绍了两种可以“欺骗”词法作用域的方法:`eval(str)`和`with(obj)`。文章结合了多位博主的总结,帮助读者更快速、便捷地掌握这些知识点。
36 2
[JS]作用域的“生产者”——词法作用域
|
1月前
|
存储 JavaScript 前端开发
js中的数据类型
JavaScript 中的数据类型包括五种基本类型(String、Number、Undefined、Boolean、Null)和三种引用类型(Object、Array、Function,以及ES6新增的Symbol)。基本类型直接存储值,引用类型存储的是指向实际数据的内存地址。了解它们的区别对于掌握 JavaScript 的变量赋值和函数传参至关重要。
24 1
|
1月前
|
前端开发 JavaScript 数据处理
CSS 变量的作用域和 JavaScript 变量的作用域有什么不同?
【10月更文挑战第28天】CSS变量和JavaScript变量虽然都有各自的作用域概念,但由于它们所属的语言和应用场景不同,其作用域的定义、范围、覆盖规则以及与其他语言特性的交互方式等方面都存在明显的差异。理解这些差异有助于更好地在Web开发中分别运用它们来实现预期的页面效果和功能逻辑。
|
1月前
|
JavaScript 前端开发
如何在 JavaScript 中实现块级作用域?
【10月更文挑战第29天】通过使用 `let`、`const` 关键字、立即执行函数表达式以及模块模式等方法,可以在JavaScript中有效地实现块级作用域,更好地控制变量的生命周期和访问权限,提高代码的可维护性和可读性。
|
1月前
|
JavaScript 前端开发
javascript的作用域
【10月更文挑战第19天javascript的作用域
|
2月前
|
JavaScript 前端开发
JavaScript 作用域
JavaScript 作用域是指程序中可访问的变量、对象和函数的集合。它分为函数作用域和局部作用域。函数作用域内的变量仅在函数内部可见,而全局作用域的变量在整个网页中均可访问。局部变量在函数执行完毕后会被销毁,而全局变量则在整个脚本生命周期中都存在。未使用 `var` 关键字声明的变量默认为全局变量。
|
2月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
116 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法