通过这次分享让大家初步的了解JavaScript或者是swift,通过两个的类比加深彼此的记忆。
1.变量和常量
定义:
常量是在程序运行过程中,不会被修改的量。也就是说,常量一经赋值,就不能再次赋值了。
变量是在程序运行过程中,可以被多次赋值的量。也就是说,常量即使已经赋值,还可以再次赋值。
JavaScript
变量:var let
常量:const
var let都是变量,下面是两个主要的不同点,相同点大家可以查看链接
1.使用 var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。
{
var x = 2;
}
// 这里可以使用 x 变量
let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
{
let x = 2;
}
// 这里不能使用 x 变量
- 变量提升
JavaScript 中,var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明(JavaScript 变量提升)。
// 在这里可以使用 carName 变量
var carName;
let 关键字定义的变量则不可以在使用后声明,也就是变量需要先声明再使用。
// 在这里不可以使用 carName 变量
let carName;
- var 允许重新声明
如果我们用 let 在同一作用域下将同一个变量声明两次,则会出现错误,var是可以的。
swift
变量:var
常量:let
2.常用的数据类型及对应关系
在我们使用任何程序语言编程时,需要使用各种数据类型来存储不同的信息。
变量的数据类型决定了能够存储哪种数据,以及如何将代表这些值的位存储到计算机的内存中。
1、Swift中常用的数据类型有:
字符串(String)、整数类型(Int)、 32位浮点数(Float)、64位浮点数(Double)、布尔值(Bool)、字典(Dictonary)、数组(Array)、可选类型 。
2、JavaScript中常用的数据类型有:
字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、对象(Object)、数组(Array)。
3、对应关系
下面我们主要对以上数据类型在JavaScript和Swift的对应关系,以及简单的初始化进行讲解,如果想要了解更多的化可以点击数据类型后面的了解更多进行了解。
1.字符串:字符串是存储字符(比如 "Hello, World!")
类型
JavaScript:String了解更多
swift:String了解更多
初始化
JavaScript
var a = 'abc';
var a1 = "abc";//双引号单引号都可以
var a2 = String('abc')
var a3 = new String('abc')//object
swift
var a = "abc";
var a1:String = "abc";//必须是双引号
var a2 = String("abc");
var a3 = String.init("abc")
JavaScript 和Swift都有类型推导,会自动根据后面的赋值来推导出标识符的数据类型。
2.数字:数字(比如 3、 3.14)
类型
JavaScript:Number了解更多
swift:Int、Float、Double了解更多
初始化
JavaScript
var a = 3
var a1 = Number(3.14)
var a2 = new Number(3.14)//object
swift
Int:整型
Float:表示32位的浮点类型,可以精确到小数点后6位。
Double: 代表64位精度的浮点数,精确到小数点后15位
var a = 3;
var a1 = Int.init(3);
var a2:Int = 3;
var a3 = Int(3.5);//值是3
var a4 = 3.14;//默认是Double
var a5 = Double.init(3.14) ;
var a6:Double = 3 ;//3.0
var a7 = Float.init(3.14) ;
var a8:Float = 3 ;//3.0
初始化的时候是否可以给一个整型赋值浮点数呢,是可以的,会向下取整,同样也也是可以为浮点类型赋值整数,如赋值3,打印会是3.0,浮点型如果没有指定类型的话默认是Double类型的,我们可以对以上做一下验证。
3.布尔:只能有两个值:true 或 false。
类型
JavaScript:Boolean了解更多
swift:Bool
初始化
JavaScript
var a1 = true;
var a2 = Boolean(true)
var a6 = new Boolean(true)//object
swift
var a1 = true;
var a2 = Bool.init(true);
var a3 = Bool(false) ;
var a4:Bool = false;
4.数组:列表存储一系列的值
类型
JavaScript:Array了解更多
swift:Array了解更多
初始化
JavaScript
var a1 = ["Saab", "Volvo", "BMW"];
var a2 = new Array("Saab", "Volvo", "BMW");
var a3 = Array("Saab", "Volvo", "BMW");
swift
Array的初始化和以上的初始话有些区别,如果我们想在声明的时候就指定数组里存储的数据类型,是通过变量名称后加[type]来指定的。
var a1:[Any] = ["Saab", "Volvo", "BMW",true] ;
var a2 = ["Saab", "Volvo", "BMW"] ;
var a3 = Array.init(arrayLiteral: "Saab", "Volvo", "BMW");
var a4 = Array(arrayLiteral: "Saab", "Volvo", "BMW");
var a5:Array = ["Saab", "Volvo", "BMW"];
区别:
JavaScript可以在相同数组中存放不同类型的变量。
Swift 数组默认是储同一类型的多个值,如果需要存储不同类型的数据需要指定数组为Any类型,如果不指定Any类型的话会报错,我们可以验证一下。
4. 键-值对 形式存储数据的数据结构
类型
JavaScript:Object了解更多
swift:Dictonary了解更多
初始化
JavaScript
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...,对象就是一个 name:value 集合
// 以构造函数形式来调用
new Object([value])
// 也可以使用对象字面量来创建对象,
var a1={firstname:"John", lastname:"Doe", id:5566};
swift
对象[key:value],
var a1 = [Int: String]();
var a2:[Int: Any] = [1:"one",2:2];
var a3 = [1:"one",2:"two"];
注意:默认情况下swift中字典中Key是相同类型的,Value也是相同类型的,只有类型设置为Any才可以放任意类型
5.值缺失的特殊类型
类型
JavaScript:
Null
Undefined
了解更多
swift:Optional了解更多
JavaScript
var a1
var a2 = null
两者的区别就是:undefined 表示一个变量自然的、最原始的状态值,而 null 则表示一个变量被人为的设置为空对象,而不是原始状态。所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined,当需要释放一个对象时,直接赋值为 null 即可。
swift
OC中没有Optional类型,OC中所有对象变量都可以为nil,因为nil是无类型的指针。在OC中字典、数组、集合都不能放入nil,但是在Swift中,nil不是指针,只是值缺失的特殊类型,任何类型可选项都可以设置为nil
Swift中我们在变量类型后面添加 ?来表示一个可选项,例如:
var a1: String?
如果没有指定Optional变量是不能被设置为nil的,我们可以来验证一下
可选项是比较特殊的,如果一个变量被设置为了可选项,他是不能直接被使用的,比如下面这行代码是会报错的
let count = a1.count;
那么我们怎么去获取一个可选项的值呢?
1.!强制解包,例如:
let count = a1!.count;
使用这种方法你要保证可选项是有值的,没有值的时候使用是会报错的
2.if判断展开,例如:
if (a1 != nil) {
let count = a1!.count;
print(count);
}
3.使用可选项绑定的方式
if let a2 = a1 {
let count = a2.count;
print(count);
};
3.函数
函数的定义和使用
函数:函数用来完成特定任务的独立的代码块。
Swift
Swift 定义函数使用关键字 func。
func funcname(形参) -> returntype
{
Statement1
Statement2
……
Statement N
return parameters
}
1.函数的入参可以有多个,他们之间用逗号隔开,函数入参和返回值也不是必须的
func somebodysaySomething(name: String, something: String) -> String {
let str = "\(name) say \(something)";
print(str);
return str;
}
let str = somebodysaySomething(name: "kong",something: "hello");
func sayHello() {
print("hello");
}
2.一般默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。
如果想要声明一个变量参数,可以在参数定义前加 inout 关键字,这样就可以改变这个参数的值了,当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改。
func somebodysaySomething(name: inout String, something: String) -> String {
name = "小明";
let str = "\(name) say \(something)";
print(str);
return str;
}
var namestr = "kong";
var hello = "hello";
somebodysaySomething(name: &namestr,something: "hello");
在Swift中不允许修改方法函数中的参数值,因为方法中参数传递的是值而不是地址,参数被修改时编译器会认为此参数为常量类型,为什么加了inout之后就可以改变了呢,因为调用时使用&取地址,向方法中传入的是地址。注意:只能把变量作为输入输出形式参数的实际参数。你不能用常量或者字面量作为实际参数,因为常量和字面量不能修
3.函数也可以作为参数和返回值
func sum(a: Int, b: Int) -> Int {
return a + b
}
func multiplier(a: Int, b: Int) -> Int {
return a * b
}
func another(addition: (Int, Int) -> Int, a: Int, b: Int) {
print("输出结果: \(addition(a, b))")
}
another(addition: sum, a: 10, b: 20)
func method(condition: Int ) -> (Int,Int) -> Int {
if(condition>5)
{
return sum;
}else {
return multiplier;
}
}
print("计算结果1: \(method(condition:1)(10,2))");
print("计算结果6: \(method(condition:6)(10,2))");
4.可变参数,可变参数可以接受零个或多个值,可变参数通过在变量类型名后面加入(...)的方式来定义。
func add(members: Int...){
var sum = 0;
for i in members {
sum = sum + i;
}
print("sum:\(sum)")
}
add(members: 1,2,3);
add(members: 1,2,3,4);
JavaScript
JavaScript 定义函数使用关键字 function。
function functionname()
{
// 执行代码
}
- 函数不介意传递进来参数个数以及类型,因为js中的参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,至于数组中包含的内容并不关心。即使你定义的函数只接收两个参数,那么你传递一个或三个或不传参数都无所谓;
function go(x){
console.log(arguments[0]);
console.log(arguments[1]);
}
go(1,2);
- 函数不必指定是否返回值,只要return语句后跟要返回的值即可实现返回值;
function myFunction(a,b)
{
return a*b;
}
3.函数也可以作为参数和返回值
function sum (num1, num2) {
return num1 + num2;
}
function fuc (num3, num4) {
return num3 + num4;
}
console.log(fuc(sum(2,3), 5)); //10
function sum (num1, num2) {
return num1+num2;
}
function func(num1){
return sum(num1,10);
}
alert(func(10)); //20
网友评论